Skip to content

Commit 08d7159

Browse files
committed
Fully re-set any descriptor set state for a set being bound
* This prevents leakage of properties between descriptor buffer offset set and push descriptors
1 parent d4c907f commit 08d7159

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3898,10 +3898,9 @@ bool WrappedVulkan::Serialise_vkCmdBindDescriptorSets(
38983898
// consume the offsets linearly along the descriptor set layouts
38993899
for(uint32_t i = 0; i < setCount; i++)
39003900
{
3901+
descsets[firstSet + i] = VulkanStatePipeline::DescriptorAndOffsets();
39013902
descsets[firstSet + i].pipeLayout = GetResID(layout);
39023903
descsets[firstSet + i].descSet = GetResID(pDescriptorSets[i]);
3903-
descsets[firstSet + i].push = false;
3904-
descsets[firstSet + i].offsets.clear();
39053904

39063905
if(descSetLayouts[firstSet + i] == ResourceId())
39073906
continue;
@@ -3935,6 +3934,7 @@ bool WrappedVulkan::Serialise_vkCmdBindDescriptorSets(
39353934

39363935
for(uint32_t i = 0; i < setCount; i++)
39373936
{
3937+
descsets[firstSet + i] = VulkanStatePipeline::DescriptorAndOffsets();
39383938
descsets[firstSet + i].descSet = GetResID(pDescriptorSets[i]);
39393939
descsets[firstSet + i].push = false;
39403940
}
@@ -4047,10 +4047,9 @@ bool WrappedVulkan::Serialise_vkCmdBindDescriptorSets2(
40474047
// consume the offsets linearly along the descriptor set layouts
40484048
for(uint32_t i = 0; i < BindDescriptorSetsInfo.descriptorSetCount; i++)
40494049
{
4050+
descsets[firstSet + i] = VulkanStatePipeline::DescriptorAndOffsets();
40504051
descsets[firstSet + i].pipeLayout = GetResID(BindDescriptorSetsInfo.layout);
40514052
descsets[firstSet + i].descSet = GetResID(BindDescriptorSetsInfo.pDescriptorSets[i]);
4052-
descsets[firstSet + i].push = false;
4053-
descsets[firstSet + i].offsets.clear();
40544053

40554054
if(descSetLayouts[firstSet + i] == ResourceId())
40564055
continue;
@@ -4088,6 +4087,7 @@ bool WrappedVulkan::Serialise_vkCmdBindDescriptorSets2(
40884087

40894088
for(uint32_t i = 0; i < BindDescriptorSetsInfo.descriptorSetCount; i++)
40904089
{
4090+
descsets[firstSet + i] = VulkanStatePipeline::DescriptorAndOffsets();
40914091
descsets[firstSet + i].descSet = GetResID(BindDescriptorSetsInfo.pDescriptorSets[i]);
40924092
descsets[firstSet + i].push = false;
40934093
}
@@ -6189,6 +6189,7 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSet(SerialiserType &ser,
61896189

61906190
pipeline.lastBoundSet = set;
61916191

6192+
descsets[set] = VulkanStatePipeline::DescriptorAndOffsets();
61926193
descsets[set].pipeLayout = GetResID(layout);
61936194
descsets[set].descSet = setId;
61946195
descsets[set].push = true;
@@ -6218,6 +6219,7 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSet(SerialiserType &ser,
62186219

62196220
// we use a 'special' ID for the push descriptor at this index, since there's no actual
62206221
// allocated object corresponding to it.
6222+
descsets[set] = VulkanStatePipeline::DescriptorAndOffsets();
62216223
descsets[set].descSet = setId;
62226224
descsets[set].push = true;
62236225
ResourceId setLayout = m_CreationInfo.m_PipelineLayout[GetResID(layout)].descSetLayouts[set];
@@ -6472,6 +6474,7 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSetWithTemplate(
64726474

64736475
pipeline.lastBoundSet = set;
64746476

6477+
descsets[set] = VulkanStatePipeline::DescriptorAndOffsets();
64756478
descsets[set].pipeLayout = GetResID(layout);
64766479
descsets[set].descSet = setId;
64776480
descsets[set].push = true;
@@ -6501,6 +6504,7 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSetWithTemplate(
65016504

65026505
// we use a 'special' ID for the push descriptor at this index, since there's no actual
65036506
// allocated object corresponding to it.
6507+
descsets[set] = VulkanStatePipeline::DescriptorAndOffsets();
65046508
descsets[set].descSet = setId;
65056509
descsets[set].push = true;
65066510
ResourceId setLayout = m_CreationInfo.m_PipelineLayout[GetResID(layout)].descSetLayouts[set];
@@ -9215,6 +9219,7 @@ bool WrappedVulkan::Serialise_vkCmdSetDescriptorBufferOffsetsEXT(
92159219
for(uint32_t set = 0; set < setCount; set++)
92169220
{
92179221
pipeline.descSets.resize_for_index(firstSet + set);
9222+
pipeline.descSets[firstSet + set] = VulkanStatePipeline::DescriptorAndOffsets();
92189223

92199224
pipeline.descSets[firstSet + set].pipeLayout = GetResID(layout);
92209225
pipeline.descSets[firstSet + set].descBufferIdx = pBufferIndices[set];
@@ -9251,6 +9256,7 @@ bool WrappedVulkan::Serialise_vkCmdSetDescriptorBufferOffsetsEXT(
92519256
{
92529257
pipeline.descSets.resize_for_index(firstSet + set);
92539258

9259+
pipeline.descSets[firstSet + set] = VulkanStatePipeline::DescriptorAndOffsets();
92549260
pipeline.descSets[firstSet + set].pipeLayout = GetResID(layout);
92559261
pipeline.descSets[firstSet + set].descBufferIdx = pBufferIndices[set];
92569262
pipeline.descSets[firstSet + set].descBufferOffset = pOffsets[set];
@@ -9342,6 +9348,7 @@ bool WrappedVulkan::Serialise_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(
93429348

93439349
pipeline.descSets.resize_for_index(set);
93449350

9351+
pipeline.descSets[set] = VulkanStatePipeline::DescriptorAndOffsets();
93459352
pipeline.descSets[set].pipeLayout = GetResID(layout);
93469353
pipeline.descSets[set].descBufferIdx = ~0U;
93479354
pipeline.descSets[set].descBufferOffset = 0;
@@ -9443,6 +9450,7 @@ bool WrappedVulkan::Serialise_vkCmdSetDescriptorBufferOffsets2EXT(
94439450
{
94449451
pipeline.descSets.resize_for_index(firstSet + set);
94459452

9453+
pipeline.descSets[firstSet + set] = VulkanStatePipeline::DescriptorAndOffsets();
94469454
pipeline.descSets[firstSet + set].pipeLayout =
94479455
GetResID(SetDescriptorBufferOffsetsInfo.layout);
94489456
pipeline.descSets[firstSet + set].descBufferIdx =
@@ -9483,6 +9491,7 @@ bool WrappedVulkan::Serialise_vkCmdSetDescriptorBufferOffsets2EXT(
94839491
{
94849492
pipeline.descSets.resize_for_index(firstSet + set);
94859493

9494+
pipeline.descSets[firstSet + set] = VulkanStatePipeline::DescriptorAndOffsets();
94869495
pipeline.descSets[firstSet + set].pipeLayout =
94879496
GetResID(SetDescriptorBufferOffsetsInfo.layout);
94889497
pipeline.descSets[firstSet + set].descBufferIdx =
@@ -9585,6 +9594,7 @@ bool WrappedVulkan::Serialise_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT(
95859594

95869595
pipeline.descSets.resize_for_index(set);
95879596

9597+
pipeline.descSets[set] = VulkanStatePipeline::DescriptorAndOffsets();
95889598
pipeline.descSets[set].pipeLayout =
95899599
GetResID(BindDescriptorBufferEmbeddedSamplersInfo.layout);
95909600
pipeline.descSets[set].descBufferIdx = ~0U;
@@ -9688,6 +9698,7 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSet2(
96889698

96899699
pipeline.lastBoundSet = set;
96909700

9701+
descsets[set] = VulkanStatePipeline::DescriptorAndOffsets();
96919702
descsets[set].pipeLayout = GetResID(PushDescriptorSetInfo.layout);
96929703
descsets[set].descSet = setId;
96939704
descsets[set].push = true;
@@ -9722,6 +9733,7 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSet2(
97229733

97239734
// we use a 'special' ID for the push descriptor at this index, since there's no actual
97249735
// allocated object corresponding to it.
9736+
descsets[set] = VulkanStatePipeline::DescriptorAndOffsets();
97259737
descsets[set].descSet = setId;
97269738
descsets[set].push = true;
97279739
ResourceId setLayout =
@@ -9855,6 +9867,7 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSetWithTemplate2(
98559867

98569868
pipeline.lastBoundSet = set;
98579869

9870+
descsets[set] = VulkanStatePipeline::DescriptorAndOffsets();
98589871
descsets[set].pipeLayout = GetResID(PushDescriptorSetWithTemplateInfo.layout);
98599872
descsets[set].descSet = setId;
98609873
descsets[set].push = true;
@@ -9879,6 +9892,7 @@ bool WrappedVulkan::Serialise_vkCmdPushDescriptorSetWithTemplate2(
98799892

98809893
// we use a 'special' ID for the push descriptor at this index, since there's no actual
98819894
// allocated object corresponding to it.
9895+
descsets[set] = VulkanStatePipeline::DescriptorAndOffsets();
98829896
descsets[set].descSet = setId;
98839897
descsets[set].push = true;
98849898
}

0 commit comments

Comments
 (0)