1238 {
1239
1240 long orig = InterlockedCompareExchange(&(obj.buffer.id), INT32_MAX, -1);
1241 if (orig != -1) return;
1242
1244 {
1245
1246 VkMemoryRequirements memReqs;
1247 VkMemoryAllocateInfo allocInfo = {};
1248
1249 allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
1250
1251 VkBufferCreateInfo BufferInfo = {};
1252 BufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
1253 BufferInfo.
size = obj.size;
1254 BufferInfo.usage = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT;
1255 VK_CHECK_RESULT(vkCreateBuffer($device, &BufferInfo,
nullptr, &ubo.
buffer));
1256 vkGetBufferMemoryRequirements($device, ubo.
buffer, &memReqs);
1257 allocInfo.allocationSize = memReqs.size;
1258 allocInfo.memoryTypeIndex = vka::shelve::getMemoryTypeIndex(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
1259
1260
1261 obj.reqAlign = memReqs.alignment;
1262 obj.reqSize = memReqs.size;
1263
1264
1265
1266 VK_CHECK_RESULT(vkAllocateMemory($device, &allocInfo, &$Policy_AllocateMemory, &(ubo.
memory)));
1267 VK_CHECK_RESULT(vkBindBufferMemory($device, ubo.
buffer, ubo.
memory, 0));
1268
1269
1272
1273
1274
1275
1276
1278 ubo.
info.offset = 0;
1279 ubo.
info.range = obj.size;
1280
1281 VK_CHECK_RESULT(vkMapMemory($device, ubo.
memory, 0, obj.size, 0, (
void**)&ubo.
mapped));
1282 obj.info = ubo.
info;
1284 log_obj(
" Buffer Size %zu = [align %zu ] ReqSize %zu = [reqAlign %zu ] \n", obj.size, obj.align, memReqs.size, memReqs.alignment);
1285
1286 }
1287
1288
1289
1291 AcquireSRWLockExclusive(&
slim);
1292 uth.push_back(obj.buffer.id);
1293 ReleaseSRWLockExclusive(&
slim);
1294
1295 {
1296
1297 VkBufferView texel_view;
1298 VkBufferViewCreateInfo view_info = {};
1299 view_info.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
1300 view_info.pNext = NULL;
1301 view_info.buffer = ubo.
buffer;
1302 view_info.format = obj.format;
1303 view_info.offset = 0;
1304 view_info.range = obj.size;
1305
1306 vkCreateBufferView($device, &view_info, NULL, &texel_view);
1307
1308 obj.vkView = texel_view;
1309
1310
1311 };
1312
1313 };