From e4a3fdce0f0bbe418114bf4be5aef4ffe5e60816 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Thu, 16 Apr 2026 14:38:05 +0100 Subject: [PATCH] Extend VK_Resource_Usage test IndirectDrawCount Loose events (barriers) after actions --- util/test/demos/vk/vk_resource_usage.cpp | 211 ++++++++++++++++- util/test/tests/Vulkan/VK_Resource_Usage.py | 245 ++++++++++++++------ 2 files changed, 370 insertions(+), 86 deletions(-) diff --git a/util/test/demos/vk/vk_resource_usage.cpp b/util/test/demos/vk/vk_resource_usage.cpp index 504976b55..4106e3f7e 100644 --- a/util/test/demos/vk/vk_resource_usage.cpp +++ b/util/test/demos/vk/vk_resource_usage.cpp @@ -119,6 +119,12 @@ void main() indirectData.data[8].x = 0; indirectData.data[9] = uvec4(3, 1, 9, 0); // draw indices 9..11 indirectData.data[10].x = 0; + + // Counts + indirectData.data[10].x = 3; + indirectData.data[10].y = 2; + indirectData.data[10].z = 0; + indirectData.data[10].w = 0; } } @@ -166,23 +172,51 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) optDevExts.push_back(VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME); optDevExts.push_back(VK_EXT_NESTED_COMMAND_BUFFER_EXTENSION_NAME); + optDevExts.push_back(VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME); VulkanGraphicsTest::Prepare(argc, argv); if(!Avail.empty()) return; - static VkPhysicalDeviceBufferDeviceAddressFeaturesKHR bufaddrFeatures = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR, - }; + if(devVersion >= VK_MAKE_VERSION(1, 2, 0)) + { + static VkPhysicalDeviceVulkan12Features feats = { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, + }; - getPhysFeatures2(&bufaddrFeatures); + VkPhysicalDeviceVulkan12Features vk12avail = { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, + }; - if(!bufaddrFeatures.bufferDeviceAddress) - Avail = "feature 'bufferDeviceAddress' not available"; + getPhysFeatures2(&vk12avail); - bufaddrFeatures.pNext = (void *)devInfoNext; - devInfoNext = &bufaddrFeatures; + if(vk12avail.drawIndirectCount) + feats.drawIndirectCount = VK_TRUE; + + if(vk12avail.bufferDeviceAddress) + feats.bufferDeviceAddress = VK_TRUE; + + feats.pNext = (void *)devInfoNext; + devInfoNext = &feats; + + if(!vk12avail.bufferDeviceAddress) + Avail = "feature 'bufferDeviceAddress' not available"; + } + else + { + static VkPhysicalDeviceBufferDeviceAddressFeaturesKHR bufaddrFeatures = { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR, + }; + + getPhysFeatures2(&bufaddrFeatures); + + if(!bufaddrFeatures.bufferDeviceAddress) + Avail = "feature 'bufferDeviceAddress' not available"; + + bufaddrFeatures.pNext = (void *)devInfoNext; + devInfoNext = &bufaddrFeatures; + } if(hasExt(VK_EXT_NESTED_COMMAND_BUFFER_EXTENSION_NAME)) { @@ -310,6 +344,18 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) getPhysProperties2(&descBufProps); } + bool draw_indirect_count = false; + if(devVersion >= VK_MAKE_VERSION(1, 2, 0)) + { + draw_indirect_count = true; + } + else + { + draw_indirect_count = hasExt(VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME); + } + + if(draw_indirect_count) + TEST_LOG("Running tests with draw indirect count"); if(nestedSecondaries) TEST_LOG("Running tests with nested secondaries"); if(descBuffer) @@ -593,7 +639,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) {vkh::DescriptorBufferInfo(compBufOut.buffer)}), }); - sqSize = float(screenHeight) / 4.0f; + sqSize = float(screenHeight) / 5.0f; using uvec4 = uint32_t[4]; @@ -670,6 +716,10 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) 0, {compDescSet}, {}); vkCmdBindPipeline(compSecCmd, VK_PIPELINE_BIND_POINT_COMPUTE, compDescSetPipe); vkCmdDispatch(compSecCmd, 1, 1, 1); + vkh::cmdPipelineBarrier( + compSecCmd, {}, + {vkh::BufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_SHADER_WRITE_BIT, + indirectData.buffer)}); vkEndCommandBuffer(compSecCmd); VkCommandBuffer compNestedSecCmd = GetCommandBuffer(VK_COMMAND_BUFFER_LEVEL_SECONDARY); @@ -871,7 +921,12 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) vkCmdBindIndexBuffer(cmd, ib.buffer, 0, VK_INDEX_TYPE_UINT32); vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, descSetPipe); - setMarker(cmd, "DrawIndirect"); + setMarker(cmd, "DrawIndirect: Single"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + vkCmdDrawIndirect(cmd, indirectData.buffer, offset, 1, strideDraw); + NextTest(); + + setMarker(cmd, "DrawIndirect: Multiple"); vkCmdSetViewport(cmd, 0, 1, &viewPort); vkCmdDrawIndirect(cmd, indirectData.buffer, offset, countDraws, strideDraw); NextTest(); @@ -885,6 +940,10 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) strideDrawIndexed); NextTest(); vkCmdEndRenderPass(cmd); + vkh::cmdPipelineBarrier( + cmd, {}, + {vkh::BufferMemoryBarrier(VK_ACCESS_INDIRECT_COMMAND_READ_BIT, + VK_ACCESS_INDIRECT_COMMAND_READ_BIT, indirectData.buffer)}); } popMarker(cmd); @@ -919,8 +978,22 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) mode = 1; vkCmdPushConstants(indirectCompSecCmd, compWriteDataPipeLayout, VK_SHADER_STAGE_COMPUTE_BIT, 0, 4, &mode); + + vkh::cmdPipelineBarrier( + indirectCompSecCmd, {}, + {vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_TRANSFER_WRITE_BIT, indirectData.buffer)}); + setMarker(indirectCompSecCmd, "DispatchIndirect"); vkCmdDispatchIndirect(indirectCompSecCmd, indirectData.buffer, 0); + vkCmdDispatchIndirect(indirectCompSecCmd, indirectData.buffer, 0); + + vkh::cmdPipelineBarrier( + indirectCompSecCmd, {}, + {vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_TRANSFER_WRITE_BIT, indirectData.buffer)}); + + vkCmdDispatchIndirect(indirectCompSecCmd, indirectData.buffer, 0); vkh::cmdPipelineBarrier(indirectCompSecCmd, {}, {vkh::BufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, @@ -954,11 +1027,18 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) vkCmdBindIndexBuffer(indirectDrawSecCmd, ib.buffer, 0, VK_INDEX_TYPE_UINT32); vkCmdBindPipeline(indirectDrawSecCmd, VK_PIPELINE_BIND_POINT_GRAPHICS, descSetPipe); - setMarker(indirectDrawSecCmd, "DrawIndirect"); + setMarker(indirectDrawSecCmd, "DrawIndirect: Single"); + + vkCmdSetViewport(indirectDrawSecCmd, 0, 1, &viewPort); + vkCmdDrawIndirect(indirectDrawSecCmd, indirectData.buffer, offset, 1, strideDraw); + NextTest(); + + setMarker(indirectDrawSecCmd, "DrawIndirect: Multiple"); vkCmdSetViewport(indirectDrawSecCmd, 0, 1, &viewPort); vkCmdDrawIndirect(indirectDrawSecCmd, indirectData.buffer, offset, countDraws, strideDraw); NextTest(); + offset += countDraws * strideDraw; uint32_t countDrawIndexed = 3; @@ -978,10 +1058,115 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) } popMarker(cmd); + pushMarker(cmd, "Loose Events After Indirect Draws"); + { + size_t offset = sizeof(uvec4); + uint32_t countDraw = 4; + uint32_t strideDraw = sizeof(uvec4); + + vkCmdBeginRenderPass( + cmd, vkh::RenderPassBeginInfo(mainWindow->rp, mainWindow->GetFB(), mainWindow->scissor), + VK_SUBPASS_CONTENTS_INLINE); + + vkCmdSetScissor(cmd, 0, 1, &mainWindow->scissor); + vkh::cmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, descSetPipeLayout, 0, + {descSet}, {}); + vkh::cmdBindVertexBuffers(cmd, 0, {vb.buffer}, {0}); + vkCmdBindIndexBuffer(cmd, ib.buffer, 0, VK_INDEX_TYPE_UINT32); + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, descSetPipe); + + setMarker(cmd, "DrawIndirect: Single"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + size_t drawIndirectOffset = offset; + vkCmdDrawIndirect(cmd, indirectData.buffer, drawIndirectOffset, 1, strideDraw); + NextTest(); + + setMarker(cmd, "DrawIndirect: Multiple"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + size_t drawIndexedIndirectOffset = offset; + vkCmdDrawIndirect(cmd, indirectData.buffer, drawIndexedIndirectOffset, countDraw, strideDraw); + NextTest(); + offset += countDraw * strideDraw; + + uint32_t countDrawIndexed = 3; + uint32_t strideDrawIndexed = 2 * sizeof(uvec4); + setMarker(cmd, "DrawIndexedIndirect"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + vkCmdDrawIndexedIndirect(cmd, indirectData.buffer, offset, countDrawIndexed, + strideDrawIndexed); + NextTest(); + offset += countDrawIndexed * strideDrawIndexed; + + if(draw_indirect_count) + { + pushMarker(cmd, "Draw Indirect Count"); + + setMarker(cmd, "DrawIndirectCount(0:0)"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + size_t countOffset = 10 * sizeof(uvec4); + vkCmdDrawIndirectCountKHR(cmd, indirectData.buffer, drawIndirectOffset, + indirectData.buffer, countOffset, 0, strideDraw); + NextTest(); + + setMarker(cmd, "DrawIndexedIndirectCount(0:0)"); + size_t indexedCountOffset = countOffset + sizeof(uint32_t); + vkCmdDrawIndexedIndirectCountKHR(cmd, indirectData.buffer, drawIndexedIndirectOffset, + indirectData.buffer, countOffset, 0, strideDrawIndexed); + NextTest(); + + size_t countZeroOffset = indexedCountOffset + sizeof(uint32_t); + setMarker(cmd, "DrawIndirectCount(10:0)"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + vkCmdDrawIndirectCountKHR(cmd, indirectData.buffer, drawIndirectOffset, + indirectData.buffer, countZeroOffset, 10, strideDraw); + NextTest(); + + setMarker(cmd, "DrawIndexedIndirectCount(10:0)"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + vkCmdDrawIndexedIndirectCountKHR(cmd, indirectData.buffer, drawIndexedIndirectOffset, + indirectData.buffer, countZeroOffset, 10, + strideDrawIndexed); + NextTest(); + + setMarker(cmd, "DrawIndirectCount(10:N)"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + vkCmdDrawIndirectCountKHR(cmd, indirectData.buffer, drawIndirectOffset, + indirectData.buffer, countOffset, 10, strideDraw); + NextTest(); + + setMarker(cmd, "DrawIndexedIndirectCount(10:N)"); + vkCmdSetViewport(cmd, 0, 1, &viewPort); + vkCmdDrawIndexedIndirectCountKHR(cmd, indirectData.buffer, drawIndexedIndirectOffset, + indirectData.buffer, indexedCountOffset, 10, + strideDrawIndexed); + NextTest(); + popMarker(cmd); + } + + vkCmdEndRenderPass(cmd); + } + popMarker(cmd); + + vkh::cmdPipelineBarrier( + cmd, {}, + {vkh::BufferMemoryBarrier(VK_ACCESS_INDIRECT_COMMAND_READ_BIT, + VK_ACCESS_INDIRECT_COMMAND_READ_BIT, indirectData.buffer)}); + + vkEndCommandBuffer(cmd); + + Submit(0, 1, {cmd}); + + cmd = GetCommandBuffer(); + + vkBeginCommandBuffer(cmd, vkh::CommandBufferBeginInfo()); + // Nested Secondary Command Buffer if(nestedSecondaries) { pushMarker(cmd, "Nested Secondary Command Buffer"); + vkCmdSetScissor(cmd, 0, 1, &mainWindow->scissor); + vkh::cmdBindVertexBuffers(cmd, 0, {vb.buffer}, {0}); + vkCmdBindIndexBuffer(cmd, ib.buffer, 0, VK_INDEX_TYPE_UINT32); setMarker(cmd, "Draw"); vkCmdBeginRenderPass( @@ -1000,6 +1185,10 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest) if(descBuffer) { pushMarker(cmd, "Descriptor Buffer"); + vkCmdSetScissor(cmd, 0, 1, &mainWindow->scissor); + vkh::cmdBindVertexBuffers(cmd, 0, {vb.buffer}, {0}); + vkCmdBindIndexBuffer(cmd, ib.buffer, 0, VK_INDEX_TYPE_UINT32); + vkCmdBindDescriptorBuffersEXT(cmd, 1, &descBuffBind); uint32_t descBuffSetIndex = 0; VkDeviceSize descBuffSetOffset = 0; diff --git a/util/test/tests/Vulkan/VK_Resource_Usage.py b/util/test/tests/Vulkan/VK_Resource_Usage.py index 3f5775449..c43717e7c 100644 --- a/util/test/tests/Vulkan/VK_Resource_Usage.py +++ b/util/test/tests/Vulkan/VK_Resource_Usage.py @@ -24,12 +24,18 @@ class VK_Resource_Usage(rdtest.TestCase): for res in resources: self.resourceUsages[res.resourceId] = self.controller.GetUsage(res.resourceId) + drawIndirectCount = self.find_action("Draw Indirect Count") is not None + rdtest.log.print(f"Has Draw Indirect Count: {'Yes' if drawIndirectCount else 'No'}") + nestedSecondaries = self.find_action("Nested Secondary Command Buffer") is not None rdtest.log.print(f"Has Nested Secondary Command Buffer: {'Yes' if nestedSecondaries else 'No'}") + descBuffer = self.find_action("Descriptor Buffer") is not None rdtest.log.print(f"Has Descriptor Buffer: {'Yes' if descBuffer else 'No'}") - countNested = 35 if nestedSecondaries else 0 - countDescBuffer = 18 if descBuffer else 0 + + countDrawIndirectCount = 30 if drawIndirectCount else 0 + countNested = 39 if nestedSecondaries else 0 + countDescBuffer = 21 if descBuffer else 0 action = self.find_action("Draw") self.controller.SetFrameEvent(action.eventId, False) @@ -56,30 +62,47 @@ class VK_Resource_Usage(rdtest.TestCase): (45,rd.ResourceUsage.ColorTarget), (59,rd.ResourceUsage.ColorTarget), (62,rd.ResourceUsage.ColorTarget), - (104,rd.ResourceUsage.ColorTarget), (105,rd.ResourceUsage.ColorTarget), - (106,rd.ResourceUsage.ColorTarget), - (107,rd.ResourceUsage.ColorTarget), + (109,rd.ResourceUsage.ColorTarget), + (110,rd.ResourceUsage.ColorTarget), + (111,rd.ResourceUsage.ColorTarget), (112,rd.ResourceUsage.ColorTarget), - (113,rd.ResourceUsage.ColorTarget), - (114,rd.ResourceUsage.ColorTarget), - (145,rd.ResourceUsage.ColorTarget), - (146,rd.ResourceUsage.ColorTarget), - (147,rd.ResourceUsage.ColorTarget), - (148,rd.ResourceUsage.ColorTarget), - (153,rd.ResourceUsage.ColorTarget), - (154,rd.ResourceUsage.ColorTarget), - (155,rd.ResourceUsage.ColorTarget)] + (117,rd.ResourceUsage.ColorTarget), + (118,rd.ResourceUsage.ColorTarget), + (119,rd.ResourceUsage.ColorTarget), + (155,rd.ResourceUsage.ColorTarget), + (159,rd.ResourceUsage.ColorTarget), + (160,rd.ResourceUsage.ColorTarget), + (161,rd.ResourceUsage.ColorTarget), + (162,rd.ResourceUsage.ColorTarget), + (167,rd.ResourceUsage.ColorTarget), + (168,rd.ResourceUsage.ColorTarget), + (169,rd.ResourceUsage.ColorTarget), + (186,rd.ResourceUsage.ColorTarget), + (190,rd.ResourceUsage.ColorTarget), + (191,rd.ResourceUsage.ColorTarget), + (192,rd.ResourceUsage.ColorTarget), + (193,rd.ResourceUsage.ColorTarget), + (198,rd.ResourceUsage.ColorTarget), + (199,rd.ResourceUsage.ColorTarget), + (200,rd.ResourceUsage.ColorTarget)] + if drawIndirectCount: + expectedUsage += [ + (221,rd.ResourceUsage.ColorTarget), + (222,rd.ResourceUsage.ColorTarget), + (223,rd.ResourceUsage.ColorTarget), + (228,rd.ResourceUsage.ColorTarget), + (229,rd.ResourceUsage.ColorTarget)] if nestedSecondaries: expectedUsage += [ - (175,rd.ResourceUsage.ColorTarget), - (178,rd.ResourceUsage.ColorTarget)] + (224+countDrawIndirectCount,rd.ResourceUsage.ColorTarget), + (227+countDrawIndirectCount,rd.ResourceUsage.ColorTarget)] if descBuffer: expectedUsage += [ - (170+countNested,rd.ResourceUsage.ColorTarget), - (173+countNested,rd.ResourceUsage.ColorTarget)] + (219+countDrawIndirectCount+countNested,rd.ResourceUsage.ColorTarget), + (222+countDrawIndirectCount+countNested,rd.ResourceUsage.ColorTarget)] - expectedUsage += [(162+countNested+countDescBuffer,rd.ResourceUsage.Barrier)] + expectedUsage += [(208+countDrawIndirectCount+countNested+countDescBuffer,rd.ResourceUsage.Barrier)] else: expectedUsage = [] elif res.type == rd.ResourceType.RenderPass: @@ -104,78 +127,133 @@ class VK_Resource_Usage(rdtest.TestCase): (45,rd.ResourceUsage.VertexBuffer), (59,rd.ResourceUsage.VertexBuffer), (62,rd.ResourceUsage.VertexBuffer), - (104,rd.ResourceUsage.VertexBuffer), (105,rd.ResourceUsage.VertexBuffer), - (106,rd.ResourceUsage.VertexBuffer), - (107,rd.ResourceUsage.VertexBuffer), + (109,rd.ResourceUsage.VertexBuffer), + (110,rd.ResourceUsage.VertexBuffer), + (111,rd.ResourceUsage.VertexBuffer), (112,rd.ResourceUsage.VertexBuffer), - (113,rd.ResourceUsage.VertexBuffer), - (114,rd.ResourceUsage.VertexBuffer), - (145,rd.ResourceUsage.VertexBuffer), - (146,rd.ResourceUsage.VertexBuffer), - (147,rd.ResourceUsage.VertexBuffer), - (148,rd.ResourceUsage.VertexBuffer), - (153,rd.ResourceUsage.VertexBuffer), - (154,rd.ResourceUsage.VertexBuffer), - (155,rd.ResourceUsage.VertexBuffer)] + (117,rd.ResourceUsage.VertexBuffer), + (118,rd.ResourceUsage.VertexBuffer), + (119,rd.ResourceUsage.VertexBuffer), + (155,rd.ResourceUsage.VertexBuffer), + (159,rd.ResourceUsage.VertexBuffer), + (160,rd.ResourceUsage.VertexBuffer), + (161,rd.ResourceUsage.VertexBuffer), + (162,rd.ResourceUsage.VertexBuffer), + (167,rd.ResourceUsage.VertexBuffer), + (168,rd.ResourceUsage.VertexBuffer), + (169,rd.ResourceUsage.VertexBuffer), + (186,rd.ResourceUsage.VertexBuffer), + (190,rd.ResourceUsage.VertexBuffer), + (191,rd.ResourceUsage.VertexBuffer), + (192,rd.ResourceUsage.VertexBuffer), + (193,rd.ResourceUsage.VertexBuffer), + (198,rd.ResourceUsage.VertexBuffer), + (199,rd.ResourceUsage.VertexBuffer), + (200,rd.ResourceUsage.VertexBuffer)] + if drawIndirectCount: + expectedUsage += [ + (221,rd.ResourceUsage.VertexBuffer), + (222,rd.ResourceUsage.VertexBuffer), + (223,rd.ResourceUsage.VertexBuffer), + (228,rd.ResourceUsage.VertexBuffer), + (229,rd.ResourceUsage.VertexBuffer)] if nestedSecondaries: expectedUsage += [ - (175,rd.ResourceUsage.VertexBuffer), - (178,rd.ResourceUsage.VertexBuffer)] + (224+countDrawIndirectCount,rd.ResourceUsage.VertexBuffer), + (227+countDrawIndirectCount,rd.ResourceUsage.VertexBuffer)] if descBuffer: expectedUsage += [ - (170+countNested,rd.ResourceUsage.VertexBuffer), - (173+countNested,rd.ResourceUsage.VertexBuffer)] + (219+countDrawIndirectCount+countNested,rd.ResourceUsage.VertexBuffer), + (222+countDrawIndirectCount+countNested,rd.ResourceUsage.VertexBuffer)] if (res.name == "Index Buffer"): expectedUsage = [(35,rd.ResourceUsage.IndexBuffer), (45,rd.ResourceUsage.IndexBuffer), (62,rd.ResourceUsage.IndexBuffer), - (112,rd.ResourceUsage.IndexBuffer), - (113,rd.ResourceUsage.IndexBuffer), - (114,rd.ResourceUsage.IndexBuffer), - (153,rd.ResourceUsage.IndexBuffer), - (154,rd.ResourceUsage.IndexBuffer), - (155,rd.ResourceUsage.IndexBuffer)] + (117,rd.ResourceUsage.IndexBuffer), + (118,rd.ResourceUsage.IndexBuffer), + (119,rd.ResourceUsage.IndexBuffer), + (167,rd.ResourceUsage.IndexBuffer), + (168,rd.ResourceUsage.IndexBuffer), + (169,rd.ResourceUsage.IndexBuffer), + (198,rd.ResourceUsage.IndexBuffer), + (199,rd.ResourceUsage.IndexBuffer), + (200,rd.ResourceUsage.IndexBuffer)] + if drawIndirectCount: + expectedUsage += [ + (228,rd.ResourceUsage.IndexBuffer), + (229,rd.ResourceUsage.IndexBuffer)] if nestedSecondaries: expectedUsage += [ - (178,rd.ResourceUsage.IndexBuffer)] + (227+countDrawIndirectCount,rd.ResourceUsage.IndexBuffer)] if descBuffer: expectedUsage += [ - (173+countNested,rd.ResourceUsage.IndexBuffer)] + (222+countDrawIndirectCount+countNested,rd.ResourceUsage.IndexBuffer)] if (res.name == "Compute Buffer In"): expectedUsage += [(73,rd.ResourceUsage.CS_Constants), (80,rd.ResourceUsage.CS_Constants)] if nestedSecondaries: - expectedUsage += [(191,rd.ResourceUsage.CS_Constants)] + expectedUsage += [(240+countDrawIndirectCount,rd.ResourceUsage.CS_Constants)] if descBuffer: - expectedUsage += [(178+countNested,rd.ResourceUsage.CS_Constants)] + expectedUsage += [(227+countDrawIndirectCount+countNested,rd.ResourceUsage.CS_Constants)] if (res.name == "Compute Buffer Out"): expectedUsage += [(73,rd.ResourceUsage.CS_RWResource), (80,rd.ResourceUsage.CS_RWResource)] if nestedSecondaries: - expectedUsage += [(191,rd.ResourceUsage.CS_RWResource)] + expectedUsage += [(240+countDrawIndirectCount,rd.ResourceUsage.CS_RWResource)] if descBuffer: - expectedUsage += [(178+countNested,rd.ResourceUsage.CS_RWResource)] + expectedUsage += [(227+countDrawIndirectCount+countNested,rd.ResourceUsage.CS_RWResource)] if (res.name == "Indirect Data"): expectedUsage += [(14,rd.ResourceUsage.Barrier), (15,rd.ResourceUsage.Clear), (16,rd.ResourceUsage.Barrier), (20,rd.ResourceUsage.CS_RWResource), (21,rd.ResourceUsage.Barrier), - (91,rd.ResourceUsage.CS_RWResource), - (91,rd.ResourceUsage.Indirect), - (92,rd.ResourceUsage.Barrier), - (103,rd.ResourceUsage.Indirect), - (111,rd.ResourceUsage.Indirect), - (121,rd.ResourceUsage.Barrier), - (122,rd.ResourceUsage.Clear), - (123,rd.ResourceUsage.Barrier), - (127,rd.ResourceUsage.CS_RWResource), - (130,rd.ResourceUsage.CS_RWResource), - (130,rd.ResourceUsage.Indirect), - (131,rd.ResourceUsage.Barrier), - (144,rd.ResourceUsage.Indirect), - (152,rd.ResourceUsage.Indirect)] + (81,rd.ResourceUsage.Barrier), + (92,rd.ResourceUsage.CS_RWResource), + (92,rd.ResourceUsage.Indirect), + (93,rd.ResourceUsage.Barrier), + (105,rd.ResourceUsage.Indirect), + (108,rd.ResourceUsage.Indirect), + (116,rd.ResourceUsage.Indirect), + (122,rd.ResourceUsage.Barrier), + (127,rd.ResourceUsage.Barrier), + (128,rd.ResourceUsage.Clear), + (129,rd.ResourceUsage.Barrier), + (133,rd.ResourceUsage.CS_RWResource), + (135,rd.ResourceUsage.Barrier), + (137,rd.ResourceUsage.CS_RWResource), + (137,rd.ResourceUsage.Indirect), + (138,rd.ResourceUsage.CS_RWResource), + (138,rd.ResourceUsage.Indirect), + (139,rd.ResourceUsage.Barrier), + (140,rd.ResourceUsage.CS_RWResource), + (140,rd.ResourceUsage.Indirect), + (141,rd.ResourceUsage.Barrier), + (155,rd.ResourceUsage.Indirect), + (158,rd.ResourceUsage.Indirect), + (166,rd.ResourceUsage.Indirect), + (186,rd.ResourceUsage.Indirect), + (189,rd.ResourceUsage.Indirect), + (197,rd.ResourceUsage.Indirect)] + if drawIndirectCount: + expectedUsage += [ + (205,rd.ResourceUsage.Indirect), + (205,rd.ResourceUsage.Indirect), + (208,rd.ResourceUsage.Indirect), + (208,rd.ResourceUsage.Indirect), + (212,rd.ResourceUsage.Indirect), + (212,rd.ResourceUsage.Indirect), + (216,rd.ResourceUsage.Indirect), + (216,rd.ResourceUsage.Indirect), + (220,rd.ResourceUsage.Indirect), + (220,rd.ResourceUsage.Indirect), + (227,rd.ResourceUsage.Indirect), + (227,rd.ResourceUsage.Indirect)] + expectedUsage += [(204+countDrawIndirectCount,rd.ResourceUsage.Barrier)] + if nestedSecondaries: + expectedUsage += [ + (241+countDrawIndirectCount,rd.ResourceUsage.Barrier)] elif res.type == rd.ResourceType.Texture: if (res.name == "Offscreen MSAA Image"): expectedUsage = [(11,rd.ResourceUsage.Barrier), @@ -187,24 +265,41 @@ class VK_Resource_Usage(rdtest.TestCase): (10,rd.ResourceUsage.Clear), (42,rd.ResourceUsage.PS_Resource), (45,rd.ResourceUsage.PS_Resource), - (104,rd.ResourceUsage.PS_Resource), (105,rd.ResourceUsage.PS_Resource), - (106,rd.ResourceUsage.PS_Resource), - (107,rd.ResourceUsage.PS_Resource), + (109,rd.ResourceUsage.PS_Resource), + (110,rd.ResourceUsage.PS_Resource), + (111,rd.ResourceUsage.PS_Resource), (112,rd.ResourceUsage.PS_Resource), - (113,rd.ResourceUsage.PS_Resource), - (114,rd.ResourceUsage.PS_Resource), - (145,rd.ResourceUsage.PS_Resource), - (146,rd.ResourceUsage.PS_Resource), - (147,rd.ResourceUsage.PS_Resource), - (148,rd.ResourceUsage.PS_Resource), - (153,rd.ResourceUsage.PS_Resource), - (154,rd.ResourceUsage.PS_Resource), - (155,rd.ResourceUsage.PS_Resource)] + (117,rd.ResourceUsage.PS_Resource), + (118,rd.ResourceUsage.PS_Resource), + (119,rd.ResourceUsage.PS_Resource), + (155,rd.ResourceUsage.PS_Resource), + (159,rd.ResourceUsage.PS_Resource), + (160,rd.ResourceUsage.PS_Resource), + (161,rd.ResourceUsage.PS_Resource), + (162,rd.ResourceUsage.PS_Resource), + (167,rd.ResourceUsage.PS_Resource), + (168,rd.ResourceUsage.PS_Resource), + (169,rd.ResourceUsage.PS_Resource), + (186,rd.ResourceUsage.PS_Resource), + (190,rd.ResourceUsage.PS_Resource), + (191,rd.ResourceUsage.PS_Resource), + (192,rd.ResourceUsage.PS_Resource), + (193,rd.ResourceUsage.PS_Resource), + (198,rd.ResourceUsage.PS_Resource), + (199,rd.ResourceUsage.PS_Resource), + (200,rd.ResourceUsage.PS_Resource)] + if drawIndirectCount: + expectedUsage += [ + (221,rd.ResourceUsage.PS_Resource), + (222,rd.ResourceUsage.PS_Resource), + (223,rd.ResourceUsage.PS_Resource), + (228,rd.ResourceUsage.PS_Resource), + (229,rd.ResourceUsage.PS_Resource)] if descBuffer: expectedUsage += [ - (170+countNested,rd.ResourceUsage.PS_Resource), - (173+countNested,rd.ResourceUsage.PS_Resource)] + (219+countDrawIndirectCount+countNested,rd.ResourceUsage.PS_Resource), + (222+countDrawIndirectCount+countNested,rd.ResourceUsage.PS_Resource)] elif res.type == rd.ResourceType.CommandBuffer: expectedUsage = [(0,rd.ResourceUsage.Unused)] elif res.type == rd.ResourceType.DescriptorStore: