@@ -288,7 +288,7 @@ static void CreateMesh()
288288 vbInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
289289 vbInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
290290 VmaMemoryRequirements vbMemReq = {};
291- vbMemReq.usage = VMA_MEMORY_USAGE_CPU_TO_GPU ;
291+ vbMemReq.usage = VMA_MEMORY_USAGE_CPU_ONLY ;
292292 VkMappedMemoryRange stagingVertexBufferMem;
293293 VkBuffer stagingVertexBuffer = VK_NULL_HANDLE;
294294 ERR_GUARD_VULKAN ( vmaCreateBuffer (g_hAllocator, &vbInfo, &vbMemReq, &stagingVertexBuffer, &stagingVertexBufferMem, nullptr ) );
@@ -298,6 +298,8 @@ static void CreateMesh()
298298 memcpy (pVbData, vertices, vertexBufferSize);
299299 vmaUnmapMemory (g_hAllocator, &stagingVertexBufferMem);
300300
301+ // No need to flush stagingVertexBuffer memory because CPU_ONLY memory is always HOST_COHERENT.
302+
301303 vbInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
302304 vbMemReq.usage = VMA_MEMORY_USAGE_GPU_ONLY;
303305 ERR_GUARD_VULKAN ( vmaCreateBuffer (g_hAllocator, &vbInfo, &vbMemReq, &g_hVertexBuffer, nullptr , nullptr ) );
@@ -309,7 +311,7 @@ static void CreateMesh()
309311 ibInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
310312 ibInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
311313 VmaMemoryRequirements ibMemReq = {};
312- ibMemReq.usage = VMA_MEMORY_USAGE_CPU_TO_GPU ;
314+ ibMemReq.usage = VMA_MEMORY_USAGE_CPU_ONLY ;
313315 VkMappedMemoryRange stagingIndexBufferMem;
314316 VkBuffer stagingIndexBuffer = VK_NULL_HANDLE;
315317 ERR_GUARD_VULKAN ( vmaCreateBuffer (g_hAllocator, &ibInfo, &ibMemReq, &stagingIndexBuffer, &stagingIndexBufferMem, nullptr ) );
@@ -319,6 +321,8 @@ static void CreateMesh()
319321 memcpy (pIbData, indices, indexBufferSize);
320322 vmaUnmapMemory (g_hAllocator, &stagingIndexBufferMem);
321323
324+ // No need to flush stagingIndexBuffer memory because CPU_ONLY memory is always HOST_COHERENT.
325+
322326 ibInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
323327 ibMemReq.usage = VMA_MEMORY_USAGE_GPU_ONLY;
324328 ERR_GUARD_VULKAN ( vmaCreateBuffer (g_hAllocator, &ibInfo, &ibMemReq, &g_hIndexBuffer, nullptr , nullptr ) );
@@ -469,7 +473,7 @@ static void CreateTexture(uint32_t sizeX, uint32_t sizeY)
469473 stagingImageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
470474 stagingImageInfo.flags = 0 ;
471475 VmaMemoryRequirements stagingImageMemReq = {};
472- stagingImageMemReq.usage = VMA_MEMORY_USAGE_CPU_TO_GPU ;
476+ stagingImageMemReq.usage = VMA_MEMORY_USAGE_CPU_ONLY ;
473477 VkImage stagingImage = VK_NULL_HANDLE;
474478 VkMappedMemoryRange stagingImageMem;
475479 ERR_GUARD_VULKAN ( vmaCreateImage (g_hAllocator, &stagingImageInfo, &stagingImageMemReq, &stagingImage, &stagingImageMem, nullptr ) );
@@ -504,6 +508,8 @@ static void CreateTexture(uint32_t sizeX, uint32_t sizeY)
504508
505509 vmaUnmapMemory (g_hAllocator, &stagingImageMem);
506510
511+ // No need to flush stagingImage memory because CPU_ONLY memory is always HOST_COHERENT.
512+
507513 VkImageCreateInfo imageInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
508514 imageInfo.imageType = VK_IMAGE_TYPE_2D;
509515 imageInfo.extent .width = sizeX;
0 commit comments