mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-13 01:13:07 +00:00
VK_Resource_Usage improvements
- add secondary commands buffers to Submit() calls so they get put back into the command buffer pool - fix validation error about renderEndSemaphore - fix sync validation errors - add more names to objects - fix some incorrect names - move the pipeline bind to after marker "DrawIndirect: Single" - add marker to start and end of EIDS which should be tracked for resource usage - add a per frame update descriptorset - bind compute descriptor sets before binding compute pipelines - Remove hard coded EIDs from VK_Resource_Usage python
This commit is contained in:
1 parent
e55f7a5497
commit
bf6fe56c5b
2 files changed
+241
-153
No files matched your search
@@ -542,6 +542,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
|
||||
VkPipelineLayout meshShaderLayout = createPipelineLayout(
|
||||
vkh::PipelineLayoutCreateInfo({}, {vkh::PushConstantRange(VK_SHADER_STAGE_ALL, 0, 8)}));
|
||||
setName(meshShaderLayout, "Mesh Shader Pipeline Layout");
|
||||
|
||||
VkPipeline meshShaderPipe = VK_NULL_HANDLE;
|
||||
if(meshShader)
|
||||
@@ -563,6 +564,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
vkMeshShaderPipeCreateInfo->pInputAssemblyState = NULL;
|
||||
|
||||
meshShaderPipe = createGraphicsPipeline(vkMeshShaderPipeCreateInfo);
|
||||
setName(meshShaderPipe, "Mesh Shader Pipeline");
|
||||
}
|
||||
|
||||
VkDescriptorSetLayout compDescSetLayout =
|
||||
@@ -574,7 +576,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
|
||||
VkPipelineLayout compDescSetPipeLayout =
|
||||
createPipelineLayout(vkh::PipelineLayoutCreateInfo({compDescSetLayout}));
|
||||
setName(compDescSetPipeLayout, "Compute Pipeline Layout");
|
||||
setName(compDescSetPipeLayout, "Compute Descriptor Set Pipeline Layout");
|
||||
|
||||
vkh::ComputePipelineCreateInfo compDescSetPipeCreateInfo(
|
||||
compDescSetPipeLayout,
|
||||
@@ -607,7 +609,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
if(descBuffer)
|
||||
{
|
||||
compDescBuffPipeLayout = createPipelineLayout(vkh::PipelineLayoutCreateInfo({descBuffLayout}));
|
||||
setName(compDescSetPipeLayout, "Compute Descriptor Buffer Pipeline Layout");
|
||||
setName(compDescBuffPipeLayout, "Compute Descriptor Buffer Pipeline Layout");
|
||||
|
||||
vkh::ComputePipelineCreateInfo compDescBuffPipeCreateInfo(
|
||||
compDescBuffPipeLayout,
|
||||
@@ -836,6 +838,19 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
{
|
||||
viewPort = {0.0f, 0.0f, sqSize, sqSize, 0.0f, 1.0f};
|
||||
setName(mainWindow->GetFB(), "Main Framebuffer");
|
||||
std::vector<VkCommandBuffer> secondaries;
|
||||
|
||||
vkh::updateDescriptorSets(
|
||||
device,
|
||||
{
|
||||
vkh::WriteDescriptorSet(compWriteDataDescSet, 0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
|
||||
{vkh::DescriptorBufferInfo(indirectData.buffer)}),
|
||||
vkh::WriteDescriptorSet(compDescSet, 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
|
||||
{vkh::DescriptorBufferInfo(compBufIn.buffer)}),
|
||||
vkh::WriteDescriptorSet(
|
||||
descSet, 2, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||
{vkh::DescriptorImageInfo(offimgRTV, VK_IMAGE_LAYOUT_GENERAL, linearSampler)}),
|
||||
});
|
||||
|
||||
VkCommandBuffer barrierSecCmd = GetCommandBuffer(VK_COMMAND_BUFFER_LEVEL_SECONDARY);
|
||||
vkBeginCommandBuffer(barrierSecCmd, vkh::CommandBufferBeginInfo(
|
||||
@@ -846,7 +861,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
{vkh::BufferMemoryBarrier(VK_ACCESS_NONE, VK_ACCESS_NONE, barrier2Buffer.buffer)});
|
||||
vkEndCommandBuffer(barrierSecCmd);
|
||||
|
||||
VkCommandBuffer secCmdBuffers[3];
|
||||
std::vector<VkCommandBuffer> secCmdBuffers;
|
||||
for(size_t i = 0; i < 2; i++)
|
||||
{
|
||||
VkCommandBuffer secCmd = GetCommandBuffer(VK_COMMAND_BUFFER_LEVEL_SECONDARY);
|
||||
@@ -876,7 +891,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
popMarker(secCmd);
|
||||
|
||||
vkEndCommandBuffer(secCmd);
|
||||
secCmdBuffers[i] = secCmd;
|
||||
secCmdBuffers.push_back(secCmd);
|
||||
}
|
||||
{
|
||||
VkCommandBuffer emptySecCmd = GetCommandBuffer(VK_COMMAND_BUFFER_LEVEL_SECONDARY);
|
||||
@@ -885,7 +900,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,
|
||||
vkh::CommandBufferInheritanceInfo(renderPass, 0)));
|
||||
vkEndCommandBuffer(emptySecCmd);
|
||||
secCmdBuffers[2] = emptySecCmd;
|
||||
secCmdBuffers.push_back(emptySecCmd);
|
||||
}
|
||||
|
||||
VkCommandBuffer nestedCmd = GetCommandBuffer(VK_COMMAND_BUFFER_LEVEL_SECONDARY);
|
||||
@@ -949,6 +964,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
VkCommandBuffer cmd = GetCommandBuffer();
|
||||
|
||||
vkBeginCommandBuffer(cmd, vkh::CommandBufferBeginInfo());
|
||||
setMarker(cmd, "Resource Usage: Start");
|
||||
|
||||
VkImage swapimg =
|
||||
StartUsingBackbuffer(cmd, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_GENERAL);
|
||||
@@ -999,9 +1015,9 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
{vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
indirectData.buffer)});
|
||||
|
||||
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, compWriteDataPipe);
|
||||
vkh::cmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, compWriteDataPipeLayout, 0,
|
||||
{compWriteDataDescSet}, {});
|
||||
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, compWriteDataPipe);
|
||||
|
||||
uint32_t mode = 0;
|
||||
vkCmdPushConstants(cmd, compWriteDataPipeLayout, VK_SHADER_STAGE_COMPUTE_BIT, 0, 4, &mode);
|
||||
@@ -1068,7 +1084,8 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
{
|
||||
vkCmdBeginRenderPass(cmd, mainWindow->beginRP(),
|
||||
VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS);
|
||||
vkCmdExecuteCommands(cmd, 3, secCmdBuffers);
|
||||
vkCmdExecuteCommands(cmd, (uint32_t)secCmdBuffers.size(), secCmdBuffers.data());
|
||||
secondaries.insert(secondaries.end(), secCmdBuffers.begin(), secCmdBuffers.end());
|
||||
vkCmdEndRenderPass(cmd);
|
||||
}
|
||||
popMarker(cmd);
|
||||
@@ -1092,6 +1109,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
pushMarker(cmd, "Secondary Command Buffer");
|
||||
{
|
||||
vkCmdExecuteCommands(cmd, 1, &compSecCmd);
|
||||
secondaries.push_back(compSecCmd);
|
||||
}
|
||||
popMarker(cmd);
|
||||
}
|
||||
@@ -1101,9 +1119,9 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
{
|
||||
pushMarker(cmd, "Indirect Dispatch Write IndirectDraw Data");
|
||||
{
|
||||
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, compWriteDataPipe);
|
||||
vkh::cmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, compWriteDataPipeLayout,
|
||||
0, {compWriteDataDescSet}, {});
|
||||
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, compWriteDataPipe);
|
||||
|
||||
uint32_t mode = 1;
|
||||
vkCmdPushConstants(cmd, compWriteDataPipeLayout, VK_SHADER_STAGE_COMPUTE_BIT, 0, 4, &mode);
|
||||
@@ -1187,9 +1205,9 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
{vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT, indirectData.buffer)});
|
||||
|
||||
vkCmdBindPipeline(indirectCompSecCmd, VK_PIPELINE_BIND_POINT_COMPUTE, compWriteDataPipe);
|
||||
vkh::cmdBindDescriptorSets(indirectCompSecCmd, VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||
compWriteDataPipeLayout, 0, {compWriteDataDescSet}, {});
|
||||
vkCmdBindPipeline(indirectCompSecCmd, VK_PIPELINE_BIND_POINT_COMPUTE, compWriteDataPipe);
|
||||
|
||||
uint32_t mode = 0;
|
||||
vkCmdPushConstants(indirectCompSecCmd, compWriteDataPipeLayout,
|
||||
@@ -1201,10 +1219,11 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
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)});
|
||||
vkh::cmdPipelineBarrier(indirectCompSecCmd, {},
|
||||
{vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT |
|
||||
VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
|
||||
indirectData.buffer)});
|
||||
|
||||
setMarker(indirectCompSecCmd, "DispatchIndirect");
|
||||
vkCmdDispatchIndirect(indirectCompSecCmd, indirectData.buffer, 0);
|
||||
@@ -1212,8 +1231,10 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
|
||||
vkh::cmdPipelineBarrier(
|
||||
indirectCompSecCmd, {},
|
||||
{vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT, indirectData.buffer)});
|
||||
{vkh::BufferMemoryBarrier(
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
|
||||
indirectData.buffer)});
|
||||
|
||||
vkCmdDispatchIndirect(indirectCompSecCmd, indirectData.buffer, 0);
|
||||
|
||||
@@ -1226,6 +1247,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
}
|
||||
|
||||
vkCmdExecuteCommands(cmd, 1, &indirectCompSecCmd);
|
||||
secondaries.push_back(indirectCompSecCmd);
|
||||
|
||||
vkCmdBeginRenderPass(cmd, mainWindow->beginRP(),
|
||||
VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS);
|
||||
@@ -1246,10 +1268,9 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
descSetPipeLayout, 0, {descSet}, {});
|
||||
vkh::cmdBindVertexBuffers(indirectDrawSecCmd, 0, {vb.buffer}, {0});
|
||||
vkCmdBindIndexBuffer(indirectDrawSecCmd, ib.buffer, 0, VK_INDEX_TYPE_UINT32);
|
||||
vkCmdBindPipeline(indirectDrawSecCmd, VK_PIPELINE_BIND_POINT_GRAPHICS, descSetPipe);
|
||||
|
||||
setMarker(indirectDrawSecCmd, "DrawIndirect: Single");
|
||||
|
||||
vkCmdBindPipeline(indirectDrawSecCmd, VK_PIPELINE_BIND_POINT_GRAPHICS, descSetPipe);
|
||||
vkCmdSetViewport(indirectDrawSecCmd, 0, 1, &viewPort);
|
||||
vkCmdDrawIndirect(indirectDrawSecCmd, indirectData.buffer, offset, 1, strideDraw);
|
||||
NextTest();
|
||||
@@ -1272,6 +1293,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
vkEndCommandBuffer(indirectDrawSecCmd);
|
||||
}
|
||||
vkCmdExecuteCommands(cmd, 1, &indirectDrawSecCmd);
|
||||
secondaries.push_back(indirectDrawSecCmd);
|
||||
|
||||
vkCmdEndRenderPass(cmd);
|
||||
}
|
||||
@@ -1292,9 +1314,9 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
{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");
|
||||
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, descSetPipe);
|
||||
vkCmdSetViewport(cmd, 0, 1, &viewPort);
|
||||
size_t drawIndirectOffset = offset;
|
||||
vkCmdDrawIndirect(cmd, indirectData.buffer, drawIndirectOffset, 1, strideDraw);
|
||||
@@ -1379,7 +1401,8 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
|
||||
vkEndCommandBuffer(cmd);
|
||||
|
||||
Submit(0, 3, {cmd});
|
||||
Submit(0, 2, {cmd}, secondaries);
|
||||
secondaries.clear();
|
||||
|
||||
cmd = GetCommandBuffer();
|
||||
|
||||
@@ -1397,10 +1420,12 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
vkCmdBeginRenderPass(cmd, mainWindow->beginRP(),
|
||||
VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS);
|
||||
vkCmdExecuteCommands(cmd, 1, &nestedCmd);
|
||||
secondaries.push_back(nestedCmd);
|
||||
vkCmdEndRenderPass(cmd);
|
||||
|
||||
setMarker(cmd, "Dispatch");
|
||||
vkCmdExecuteCommands(cmd, 1, &compNestedSecCmd);
|
||||
secondaries.push_back(compNestedSecCmd);
|
||||
|
||||
popMarker(cmd);
|
||||
}
|
||||
@@ -1442,7 +1467,7 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
vkh::cmdPipelineBarrier(
|
||||
restoreDescBufCmd, {},
|
||||
{
|
||||
vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_READ_BIT, VK_ACCESS_TRANSFER_READ_BIT,
|
||||
vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
|
||||
descBackupBuf.buffer),
|
||||
vkh::BufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
descBuf.buffer),
|
||||
@@ -1549,7 +1574,9 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
vkEndCommandBuffer(cmd);
|
||||
cmds.push_back(cmd);
|
||||
|
||||
Submit(1, 3, cmds);
|
||||
// Final submit related to backbuffer
|
||||
Submit(1, 2, cmds, secondaries);
|
||||
secondaries.clear();
|
||||
|
||||
std::vector<VkCommandBuffer> cmds2;
|
||||
cmds2.push_back(barrierCmd);
|
||||
@@ -1562,7 +1589,9 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
vkWaitForFences(device, 1, &barrierCmdSubmitFence, VK_TRUE, UINT64_MAX);
|
||||
}
|
||||
|
||||
cmd = GetCommandBuffer();
|
||||
CHECK_VKR(vkAllocateCommandBuffers(device, vkh::CommandBufferAllocateInfo(barrierCmdPool, 1),
|
||||
&cmd));
|
||||
setName(cmd, "Multiple Secondary Executes Command Buffer");
|
||||
|
||||
vkBeginCommandBuffer(cmd, vkh::CommandBufferBeginInfo());
|
||||
|
||||
@@ -1575,9 +1604,16 @@ RD_TEST(VK_Resource_Usage, VulkanGraphicsTest)
|
||||
popMarker(cmd);
|
||||
}
|
||||
|
||||
setMarker(cmd, "Resource Usage: End");
|
||||
vkEndCommandBuffer(cmd);
|
||||
|
||||
Submit(2, 3, {cmd});
|
||||
std::vector<VkCommandBuffer> cmds3;
|
||||
cmds3.push_back(cmd);
|
||||
submit = vkh::SubmitInfo(cmds3);
|
||||
vkWaitForFences(device, 1, &barrierCmdSubmitFence, VK_TRUE, UINT64_MAX);
|
||||
vkResetFences(device, 1, &barrierCmdSubmitFence);
|
||||
CHECK_VKR(vkQueueSubmit(queue, 1, &submit, barrierCmdSubmitFence));
|
||||
vkWaitForFences(device, 1, &barrierCmdSubmitFence, VK_TRUE, UINT64_MAX);
|
||||
|
||||
Present();
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
demos_test_name = 'VK_Resource_Usage'
|
||||
resourceUsages: Dict[rd.ResourceId, List[rd.EventUsage]] = {}
|
||||
eids: List[int] = []
|
||||
markerStart = 0
|
||||
markerEnd = 0
|
||||
|
||||
def add_action(self, action: rd.ActionDescription):
|
||||
self.eids.append(action.eventId)
|
||||
@@ -17,14 +19,21 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
|
||||
def check_resource_usage(self, res: rd.ResourceDescription, expectedUsages: List[Tuple[int,rd.ResourceUsage]]):
|
||||
usages = self.resourceUsages[res.resourceId]
|
||||
if len(usages) != len(expectedUsages):
|
||||
for u in usages:
|
||||
rdtest.log.print(f"Resource '{res.name}' {res.resourceId} usage EID:{u.eventId} usage:{u.usage.name}")
|
||||
if len(usages) == 1 and usages[0].eventId == 0 and usages[0].usage == rd.ResourceUsage.Unused:
|
||||
resUsages = usages
|
||||
else:
|
||||
resUsages = [u for u in usages if u.eventId >= self.markerStart and u.eventId <= self.markerEnd]
|
||||
rdtest.log.print(f"Resource '{res.name}' type:{res.type.name} {res.resourceId} usages:{len(resUsages)} expectedUsages:{len(expectedUsages)}")
|
||||
if len(resUsages) != len(expectedUsages):
|
||||
rdtest.log.print(f"Usages for Resource '{res.name}' {res.resourceId}")
|
||||
for u in resUsages:
|
||||
rdtest.log.print(f"EID:{u.eventId} usage:{u.usage.name}")
|
||||
rdtest.log.print(f"Expected Usages for Resource '{res.name}' {res.resourceId}")
|
||||
for u in expectedUsages:
|
||||
eid, usage = u
|
||||
rdtest.log.print(f"Resource '{res.name}' {res.resourceId} usage EID:{eid} usage:{usage.name}")
|
||||
raise rdtest.TestFailureException(f"'{res.name}' {res.resourceId} Incorrect resource usages count expected:{len(expectedUsages)} actual:{len(usages)}")
|
||||
for i, u in enumerate(usages):
|
||||
rdtest.log.print(f"EID:{eid} usage:{usage.name}")
|
||||
raise rdtest.TestFailureException(f"'{res.name}' {res.resourceId} Incorrect resource usages count expected:{len(expectedUsages)} actual:{len(resUsages)}")
|
||||
for i, u in enumerate(resUsages):
|
||||
eid, usage = expectedUsages[i]
|
||||
if u.usage != usage:
|
||||
raise rdtest.TestFailureException(f"'{res.name}' {res.resourceId} EID:{u.eventId} Incorrect resource usage expected:{usage.name} actual:{u.usage.name}")
|
||||
@@ -50,13 +59,6 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
meshShader = self.find_action("Mesh Shader") is not None
|
||||
rdtest.log.print(f"Has Mesh Shader: {'Yes' if meshShader else 'No'}")
|
||||
|
||||
countDrawIndirectCount = 30 if drawIndirectCount else 0
|
||||
countNested = 39 if nestedSecondaries else 0
|
||||
countDescBufferCopy = 10 if descBuffer else 0
|
||||
countDescBuffer = 21 if descBuffer else 0
|
||||
countDescBuffer += countDescBufferCopy
|
||||
countMeshShader = 33 if meshShader else 0
|
||||
|
||||
# Walk the actions finding all the Dispatch, Draw, DrawIndexed, DrawIndirect, DrawIndirectCount
|
||||
sdfile = self.controller.GetStructuredFile()
|
||||
actions = self.controller.GetRootActions().copy()
|
||||
@@ -74,23 +76,53 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
resetFencesEIDs: List[int] = []
|
||||
descSetDrawEIDs: List[int] = []
|
||||
descBufferDrawEIDs: List[int] = []
|
||||
cmdDrawIndirectEIDs: List[int] = []
|
||||
cmdMeshDispatchIndirectEIDs: List[int] = []
|
||||
endRenderPassEIDs : List[int] = []
|
||||
fillBufferEIDs: List[int] = []
|
||||
copyBufferEIDs: List[int] = []
|
||||
|
||||
markerGraphics = 0
|
||||
markerGraphicsNoDescriptorSet = 0
|
||||
markerGraphicsDescriptorSet = 0
|
||||
markerGraphicsSecondaryCommandBuffer = 0
|
||||
markerIndirect = 0
|
||||
markerIndirectWriteIndirectDispatchData = 0
|
||||
markerIndirectDispatchWriteIndirectDrawData = 0
|
||||
markerIndirectIndirectDraws = 0
|
||||
markerIndirectSecondaryCommandBuffer = 0
|
||||
markerIndirectSecondaryCommandBufferDispatchIndirect = 0
|
||||
markerIndirectEnd = 0
|
||||
markerNestedSecondaryCommandBuffer = 0
|
||||
markerNestedSecondaryCommandBufferDispatch = 0
|
||||
markerDescriptorBuffer = 0
|
||||
markerBarrierCommandSubmitFence = 0
|
||||
markerCompute = 0
|
||||
markerComputeDescriptorSet = 0
|
||||
markerComputeSecondaryCommandBuffer = 0
|
||||
markerLooseEventsAfterIndirectDrawsDrawIndirectSingle = 0
|
||||
markerMultipleCommandBufferSubmits = 0
|
||||
markerMultipleSecondaryCommandBufferExecutes = 0
|
||||
|
||||
self.markerStart = self.find_action("Resource Usage: Start").eventId
|
||||
self.markerEnd = self.find_action("Resource Usage: End").eventId
|
||||
markerIndirectWriteIndirectDispatchData = self.find_action("Indirect Write IndirectDispatch Data").eventId
|
||||
markerGraphics = self.find_action("Graphics").eventId
|
||||
markerGraphicsNoDescriptorSet = self.find_action("No Descriptor Set", markerGraphics).eventId
|
||||
markerGraphicsDescriptorSet = self.find_action("Descriptor Set", markerGraphicsNoDescriptorSet+1).eventId
|
||||
markerGraphicsSecondaryCommandBuffer = self.find_action("Secondary Command Buffer").eventId
|
||||
if nestedSecondaries:
|
||||
markerNestedSecondaryCommandBuffer = self.find_action("Nested Secondary Command Buffer").eventId
|
||||
markerNestedSecondaryCommandBufferDispatch = self.find_action("Dispatch", markerNestedSecondaryCommandBuffer).eventId
|
||||
if descBuffer:
|
||||
markerDescriptorBuffer = self.find_action("Descriptor Buffer").eventId
|
||||
markerBarrierCommandSubmitFence = self.find_action("Barrier Command Submit Fence").eventId
|
||||
markerCompute = self.find_action("Compute").eventId
|
||||
markerComputeSecondaryCommandBuffer = self.find_action("Secondary Command Buffer", markerCompute).eventId
|
||||
markerLooseEventsAfterIndirectDraws = self.find_action("Loose Events After Indirect Draws").eventId
|
||||
markerLooseEventsAfterIndirectDrawsDrawIndirectSingle = self.find_action("DrawIndirect: Single", markerLooseEventsAfterIndirectDraws).eventId
|
||||
markerMultipleCommandBufferSubmits = self.find_action("Multiple Command Buffer Submits").eventId
|
||||
markerMultipleSecondaryCommandBufferExecutes = self.find_action("Multiple Secondary Command Buffer Executes").eventId
|
||||
|
||||
while len(actions) > 0:
|
||||
action = actions.pop(0)
|
||||
@@ -115,19 +147,23 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
meshDispatchEIDs.append(action.eventId)
|
||||
if flags & rd.ActionFlags.MultiAction:
|
||||
multiEIDs.append(action.eventId)
|
||||
if "Count" in action.customName:
|
||||
if not action.eventId in indirectCountEIDs:
|
||||
indirectCountEIDs.append(action.eventId)
|
||||
if flags & rd.ActionFlags.PushMarker:
|
||||
parentName = action.parent.customName if action.parent is not None else None
|
||||
markerPath = parentName + "." + action.customName if parentName is not None else action.customName
|
||||
if not markerGraphicsDescriptorSet and markerPath == "Graphics.Descriptor Set":
|
||||
rdtest.log.print(f"{action.parent.customName} {action.parent.eventId} {action.customName} {action.eventId}")
|
||||
markerGraphicsDescriptorSet = action.eventId
|
||||
if not markerIndirect and markerPath == "Indirect":
|
||||
markerIndirect = action.eventId
|
||||
markerIndirectEnd = action.children[-1].eventId
|
||||
if not markerCompute and markerPath == "Compute":
|
||||
markerCompute = action.eventId
|
||||
if not markerComputeDescriptorSet and markerPath == "Compute.Descriptor Set":
|
||||
markerComputeDescriptorSet = action.eventId
|
||||
if "vkCmdDrawIndirect(" in action.customName:
|
||||
cmdDrawIndirectEIDs.append(action.eventId)
|
||||
if "vkCmdDrawIndexedIndirect(" in action.customName:
|
||||
cmdDrawIndirectEIDs.append(action.eventId)
|
||||
if "vkCmdDrawMeshTasksIndirectEXT(" in action.customName:
|
||||
cmdMeshDispatchIndirectEIDs.append(action.eventId)
|
||||
for e in action.events:
|
||||
eventName = sdfile.chunks[e.chunkIndex].name
|
||||
if "vkQueueSubmit" in eventName:
|
||||
@@ -136,28 +172,41 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
waitFencesEIDs.append(e.eventId)
|
||||
if "vkResetFences" in eventName:
|
||||
resetFencesEIDs.append(e.eventId)
|
||||
if "vkCmdCopyBuffer" in eventName:
|
||||
copyBufferEIDs.append(e.eventId)
|
||||
if "vkCmdFillBuffer" in eventName:
|
||||
fillBufferEIDs.append(e.eventId)
|
||||
if "vkCmdEndRenderPass" in eventName:
|
||||
endRenderPassEIDs.append(e.eventId)
|
||||
|
||||
for eid in drawEIDs:
|
||||
if eid > markerGraphicsDescriptorSet and eid < markerGraphicsSecondaryCommandBuffer:
|
||||
descSetDrawEIDs.append(eid)
|
||||
elif eid > markerIndirect and (not nestedSecondaries or eid < markerNestedSecondaryCommandBuffer):
|
||||
descSetDrawEIDs.append(eid)
|
||||
elif descBuffer and eid > markerDescriptorBuffer:
|
||||
descBufferDrawEIDs.append(eid)
|
||||
markerIndirectDispatchWriteIndirectDrawData = self.find_action("Indirect Dispatch Write IndirectDraw Data", markerIndirect).eventId
|
||||
markerIndirectIndirectDraws = self.find_action("Indirect Draws", markerIndirectDispatchWriteIndirectDrawData).eventId
|
||||
markerIndirectSecondaryCommandBuffer = self.find_action("Secondary Command Buffer", markerIndirect).eventId
|
||||
markerIndirectSecondaryCommandBufferDispatchIndirect = self.find_action("DispatchIndirect", markerIndirectSecondaryCommandBuffer).eventId
|
||||
|
||||
descSetDrawEIDs += [eid for eid in drawEIDs
|
||||
if (eid > markerGraphicsDescriptorSet and eid < markerGraphicsSecondaryCommandBuffer) or
|
||||
(eid > markerIndirect and (not nestedSecondaries or eid < markerNestedSecondaryCommandBuffer))]
|
||||
descBufferDrawEIDs += [eid for eid in drawEIDs if descBuffer and eid > markerDescriptorBuffer]
|
||||
|
||||
drawEIDs.sort()
|
||||
indexedEIDs.sort()
|
||||
indexedSpecialEIDs.sort()
|
||||
dispatchEIDs.sort()
|
||||
multiEIDs.sort()
|
||||
indirectEIDs.sort()
|
||||
meshDispatchEIDs.sort()
|
||||
multiEIDs.sort()
|
||||
indirectCountEIDs.sort()
|
||||
submitEIDs.sort()
|
||||
waitFencesEIDs.sort()
|
||||
resetFencesEIDs.sort()
|
||||
descSetDrawEIDs.sort()
|
||||
descBufferDrawEIDs.sort()
|
||||
fillBufferEIDs.sort()
|
||||
copyBufferEIDs.sort()
|
||||
endRenderPassEIDs.sort()
|
||||
cmdDrawIndirectEIDs.sort()
|
||||
cmdMeshDispatchIndirectEIDs.sort()
|
||||
|
||||
action = self.find_action("Draw")
|
||||
self.set_event(action.eventId, False)
|
||||
@@ -176,16 +225,13 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
# the swap chain image has usage, anything else does not
|
||||
if res.resourceId == swapImage:
|
||||
expectedUsage = [
|
||||
(6,rd.ResourceUsage.Barrier),
|
||||
(6,rd.ResourceUsage.Discard),
|
||||
(7,rd.ResourceUsage.Clear),
|
||||
(8,rd.ResourceUsage.Barrier)]
|
||||
for eid in drawEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.ColorTarget))
|
||||
for eid in meshDispatchEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.ColorTarget))
|
||||
expectedUsage += [
|
||||
(235+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier)]
|
||||
(self.markerStart + 1,rd.ResourceUsage.Barrier),
|
||||
(self.markerStart + 1,rd.ResourceUsage.Discard),
|
||||
(self.markerStart + 2,rd.ResourceUsage.Clear),
|
||||
(self.markerStart + 3,rd.ResourceUsage.Barrier)]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.ColorTarget) for eid in drawEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.ColorTarget) for eid in meshDispatchEIDs]
|
||||
expectedUsage += [(markerBarrierCommandSubmitFence - 1, rd.ResourceUsage.Barrier)]
|
||||
else:
|
||||
expectedUsage = []
|
||||
elif res.type == rd.ResourceType.RenderPass:
|
||||
@@ -204,116 +250,123 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
expectedUsage = [(0,rd.ResourceUsage.Unused)]
|
||||
elif res.type == rd.ResourceType.Buffer:
|
||||
if res.name == "Vertex Buffer":
|
||||
for eid in drawEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.VertexBuffer))
|
||||
expectedUsage += [(eid,rd.ResourceUsage.VertexBuffer) for eid in drawEIDs]
|
||||
if res.name == "Index Buffer":
|
||||
for eid in indexedEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.IndexBuffer))
|
||||
expectedUsage += [(eid,rd.ResourceUsage.IndexBuffer) for eid in indexedEIDs]
|
||||
if res.name == "Compute Buffer In":
|
||||
# All dispatches within "Compute" region
|
||||
# All dispatches within "Nested Secondary Command Buffer" region
|
||||
for eid in dispatchEIDs:
|
||||
if eid > markerComputeDescriptorSet and eid < markerIndirect:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CS_Constants))
|
||||
elif nestedSecondaries and eid > markerNestedSecondaryCommandBuffer:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CS_Constants))
|
||||
expectedUsage += [(eid,rd.ResourceUsage.CS_Constants) for eid in dispatchEIDs
|
||||
if (eid > markerComputeDescriptorSet and eid < markerIndirect) or
|
||||
(nestedSecondaries and eid > markerNestedSecondaryCommandBuffer)]
|
||||
if res.name == "Compute Buffer Out":
|
||||
# All dispatches within "Compute" region
|
||||
# All dispatches within "Nested Secondary Command Buffer" region
|
||||
for eid in dispatchEIDs:
|
||||
if eid > markerComputeDescriptorSet and eid < markerIndirect:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CS_RWResource))
|
||||
elif nestedSecondaries and eid > markerNestedSecondaryCommandBuffer:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CS_RWResource))
|
||||
expectedUsage += [(eid,rd.ResourceUsage.CS_RWResource) for eid in dispatchEIDs
|
||||
if (eid > markerComputeDescriptorSet and eid < markerIndirect) or
|
||||
(nestedSecondaries and eid > markerNestedSecondaryCommandBuffer)]
|
||||
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),
|
||||
(97,rd.ResourceUsage.Barrier),
|
||||
(109,rd.ResourceUsage.Barrier),
|
||||
(120,rd.ResourceUsage.Indirect),
|
||||
(124,rd.ResourceUsage.Indirect),
|
||||
(142,rd.ResourceUsage.Indirect),
|
||||
(144,rd.ResourceUsage.Barrier),
|
||||
(149,rd.ResourceUsage.Barrier),
|
||||
(150,rd.ResourceUsage.Clear),
|
||||
(151,rd.ResourceUsage.Barrier),
|
||||
(155,rd.ResourceUsage.CS_RWResource),
|
||||
(157,rd.ResourceUsage.Barrier),
|
||||
(161,rd.ResourceUsage.Barrier),
|
||||
(163,rd.ResourceUsage.Barrier),
|
||||
(177,rd.ResourceUsage.Indirect),
|
||||
(208,rd.ResourceUsage.Indirect)]
|
||||
if drawIndirectCount:
|
||||
expectedUsage += [
|
||||
(247,rd.ResourceUsage.Indirect),
|
||||
(254,rd.ResourceUsage.Indirect)]
|
||||
expectedUsage += [(231+countDrawIndirectCount,rd.ResourceUsage.Barrier)]
|
||||
if nestedSecondaries:
|
||||
expectedUsage += [
|
||||
(268+countDrawIndirectCount+countDescBufferCopy,rd.ResourceUsage.Barrier)]
|
||||
if meshShader:
|
||||
expectedUsage += [
|
||||
(249+countDrawIndirectCount+countNested+countDescBuffer,rd.ResourceUsage.Indirect),
|
||||
(252+countDrawIndirectCount+countNested+countDescBuffer,rd.ResourceUsage.Indirect),
|
||||
(255+countDrawIndirectCount+countNested+countDescBuffer,rd.ResourceUsage.Indirect)]
|
||||
for eid in indirectEIDs:
|
||||
# Dispatch + Indirect
|
||||
if eid in dispatchEIDs:
|
||||
expectedUsage += [(markerIndirectWriteIndirectDispatchData + 1,rd.ResourceUsage.Barrier),
|
||||
(markerIndirectWriteIndirectDispatchData + 2,rd.ResourceUsage.Clear),
|
||||
(markerIndirectWriteIndirectDispatchData + 3,rd.ResourceUsage.Barrier)]
|
||||
|
||||
expectedUsage += [(markerIndirectSecondaryCommandBuffer - 2,rd.ResourceUsage.Barrier),
|
||||
(markerIndirectSecondaryCommandBuffer + 3,rd.ResourceUsage.Barrier),
|
||||
(markerIndirectSecondaryCommandBuffer + 5,rd.ResourceUsage.Barrier)]
|
||||
expectedUsage += [(markerIndirectIndirectDraws - 2,rd.ResourceUsage.Barrier)]
|
||||
|
||||
expectedUsage += [(markerIndirectSecondaryCommandBufferDispatchIndirect - 1,rd.ResourceUsage.Barrier),
|
||||
(markerIndirectSecondaryCommandBufferDispatchIndirect + 3,rd.ResourceUsage.Barrier),
|
||||
(markerIndirectSecondaryCommandBufferDispatchIndirect + 5,rd.ResourceUsage.Barrier)]
|
||||
|
||||
for eid in dispatchEIDs:
|
||||
if eid in indirectEIDs:
|
||||
continue
|
||||
if eid in indirectCountEIDs:
|
||||
continue
|
||||
if eid in multiEIDs:
|
||||
continue
|
||||
if eid in indexedSpecialEIDs:
|
||||
continue
|
||||
if eid > markerIndirectWriteIndirectDispatchData and eid < markerGraphics:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CS_RWResource))
|
||||
expectedUsage.append((eid+1,rd.ResourceUsage.Barrier))
|
||||
if eid > markerComputeSecondaryCommandBuffer and eid < markerIndirect:
|
||||
expectedUsage.append((eid+1,rd.ResourceUsage.Barrier))
|
||||
if eid > markerIndirectSecondaryCommandBuffer and eid < markerIndirectEnd:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CS_RWResource))
|
||||
for eid in cmdDrawIndirectEIDs:
|
||||
if eid in indirectCountEIDs:
|
||||
continue
|
||||
if eid in multiEIDs:
|
||||
continue
|
||||
if eid in indexedSpecialEIDs:
|
||||
continue
|
||||
if eid > markerIndirectIndirectDraws and eid < markerIndirectEnd:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.Indirect))
|
||||
for eid in multiEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.Indirect))
|
||||
for eid in indirectCountEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.Indirect))
|
||||
for eid in indexedSpecialEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.IndexBuffer))
|
||||
expectedUsage.append((eid,rd.ResourceUsage.Indirect))
|
||||
if eid > markerLooseEventsAfterIndirectDrawsDrawIndirectSingle and eid < markerDescriptorBuffer:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.Indirect))
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Clear) for eid in fillBufferEIDs
|
||||
if eid > markerIndirect and eid < markerIndirectEnd]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.CS_RWResource) for eid in indirectEIDs if eid in dispatchEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Indirect) for eid in indirectEIDs if eid in dispatchEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Indirect) for eid in multiEIDs if not eid in indirectCountEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Indirect) for eid in indirectCountEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Indirect) for eid in indirectCountEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.IndexBuffer) for eid in indexedSpecialEIDs if not eid in indirectCountEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Indirect) for eid in indexedSpecialEIDs if not eid in indirectCountEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Indirect) for eid in cmdMeshDispatchIndirectEIDs if not eid in multiEIDs]
|
||||
for eid in endRenderPassEIDs:
|
||||
if eid > markerLooseEventsAfterIndirectDraws:
|
||||
expectedUsage.append((eid+2,rd.ResourceUsage.Barrier))
|
||||
break
|
||||
for eid in dispatchEIDs:
|
||||
if nestedSecondaries and eid > markerNestedSecondaryCommandBufferDispatch:
|
||||
expectedUsage.append((eid + 1,rd.ResourceUsage.Barrier))
|
||||
break
|
||||
if res.name == "Barrier Buffer":
|
||||
expectedUsage = [(243+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(251+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(259+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(267+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(275+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(283+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(291+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(299+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(307+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(315+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier)]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Barrier)
|
||||
for eid in range(markerMultipleCommandBufferSubmits + 1, markerMultipleCommandBufferSubmits + 1 + 10*8, 8)]
|
||||
if res.name == "Barrier2 Buffer":
|
||||
expectedUsage = [(323+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(328+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(333+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier),
|
||||
(338+countDrawIndirectCount+countNested+countDescBuffer+countMeshShader,rd.ResourceUsage.Barrier)]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.Barrier)
|
||||
for eid in range(markerMultipleSecondaryCommandBufferExecutes + 3, markerMultipleSecondaryCommandBufferExecutes + 3 + 4*5, 5)]
|
||||
if res.name == "Descriptor Buffer":
|
||||
if descBuffer:
|
||||
expectedUsage = [(235+countDrawIndirectCount,rd.ResourceUsage.Barrier),
|
||||
(236+countDrawIndirectCount,rd.ResourceUsage.CopySrc),
|
||||
(237+countDrawIndirectCount,rd.ResourceUsage.Barrier),
|
||||
(238+countDrawIndirectCount,rd.ResourceUsage.Clear),
|
||||
(241+countDrawIndirectCount,rd.ResourceUsage.Barrier),
|
||||
(242+countDrawIndirectCount,rd.ResourceUsage.CopyDst)]
|
||||
first = True
|
||||
for eid in copyBufferEIDs:
|
||||
if eid > markerLooseEventsAfterIndirectDraws:
|
||||
expectedUsage.append((eid-1,rd.ResourceUsage.Barrier))
|
||||
if first:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CopySrc))
|
||||
first = False
|
||||
else:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CopyDst))
|
||||
for eid in fillBufferEIDs:
|
||||
if eid > markerLooseEventsAfterIndirectDraws:
|
||||
expectedUsage.append((eid-1,rd.ResourceUsage.Barrier))
|
||||
expectedUsage.append((eid,rd.ResourceUsage.Clear))
|
||||
break
|
||||
if res.name == "Descriptor Backup Buffer":
|
||||
if descBuffer:
|
||||
expectedUsage = [(235+countDrawIndirectCount,rd.ResourceUsage.Barrier),
|
||||
(236+countDrawIndirectCount,rd.ResourceUsage.CopyDst),
|
||||
(241+countDrawIndirectCount,rd.ResourceUsage.Barrier),
|
||||
(242+countDrawIndirectCount,rd.ResourceUsage.CopySrc)]
|
||||
first = True
|
||||
for eid in copyBufferEIDs:
|
||||
if eid > markerLooseEventsAfterIndirectDraws:
|
||||
expectedUsage.append((eid-1,rd.ResourceUsage.Barrier))
|
||||
if first:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CopyDst))
|
||||
first = False
|
||||
else:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.CopySrc))
|
||||
break
|
||||
elif res.type == rd.ResourceType.Texture:
|
||||
if res.name == "Offscreen MSAA Image":
|
||||
expectedUsage = [(11,rd.ResourceUsage.Barrier),
|
||||
(11,rd.ResourceUsage.Discard),
|
||||
(12,rd.ResourceUsage.Clear)]
|
||||
expectedUsage = [(self.markerStart + 6,rd.ResourceUsage.Barrier),
|
||||
(self.markerStart + 6,rd.ResourceUsage.Discard),
|
||||
(self.markerStart + 7,rd.ResourceUsage.Clear)]
|
||||
if res.name == "Offscreen Image":
|
||||
expectedUsage = [(9,rd.ResourceUsage.Barrier),
|
||||
(9,rd.ResourceUsage.Discard),
|
||||
(10,rd.ResourceUsage.Clear)]
|
||||
for eid in descSetDrawEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.PS_Resource))
|
||||
for eid in descBufferDrawEIDs:
|
||||
expectedUsage.append((eid,rd.ResourceUsage.PS_Resource))
|
||||
expectedUsage = [(self.markerStart + 4,rd.ResourceUsage.Barrier),
|
||||
(self.markerStart + 4,rd.ResourceUsage.Discard),
|
||||
(self.markerStart + 5,rd.ResourceUsage.Clear)]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.PS_Resource) for eid in descSetDrawEIDs]
|
||||
expectedUsage += [(eid,rd.ResourceUsage.PS_Resource) for eid in descBufferDrawEIDs]
|
||||
elif res.type == rd.ResourceType.CommandBuffer:
|
||||
expectedUsage = [(0,rd.ResourceUsage.Unused)]
|
||||
elif res.type == rd.ResourceType.DescriptorStore:
|
||||
@@ -322,7 +375,6 @@ class VK_Resource_Usage(rdtest.TestCase):
|
||||
expectedUsage = [(0,rd.ResourceUsage.Unused)]
|
||||
else:
|
||||
raise rdtest.TestFailureException(f"'{res.name}' {res.resourceId} Unexpected resource type {res.type.name}")
|
||||
rdtest.log.print(f"Resource '{res.name}' type:{res.type.name} {res.resourceId} usages:{len(self.resourceUsages[res.resourceId])} expectedUsages:{len(expectedUsage)}")
|
||||
expectedUsage.sort(key=lambda x: x[0])
|
||||
self.check_resource_usage(res, expectedUsage)
|
||||
|
||||
|
||||
Reference in new issue
Block a user