If descriptor set binding does not change the descriptor set that
is bound (rebinds the same descriptor set), don't mark descriptor resource usage tracking for Metal argument buffers as dirty.
This commit is contained in:
parent
52854bb76f
commit
2405606c1e
@ -453,27 +453,33 @@ void MVKBlendColorCommandEncoderState::encodeImpl(uint32_t stage) {
|
||||
#pragma mark -
|
||||
#pragma mark MVKResourcesCommandEncoderState
|
||||
|
||||
// Track the dynamic offsets for later binding, initialize resource usage tracking to match the
|
||||
// descriptor set content, and bind the argument buffer MTLBuffer used by the descriptor set as a resource.
|
||||
void MVKResourcesCommandEncoderState::bindDescriptorSet(uint32_t descSetIndex,
|
||||
MVKDescriptorSet* descSet,
|
||||
MVKShaderResourceBinding& dslMTLRezIdxOffsets,
|
||||
MVKArrayRef<uint32_t> dynamicOffsets,
|
||||
uint32_t& dynamicOffsetIndex) {
|
||||
|
||||
bool dsChanged = (descSet != _boundDescriptorSets[descSetIndex]);
|
||||
|
||||
_boundDescriptorSets[descSetIndex] = descSet;
|
||||
|
||||
if (descSet->isUsingMetalArgumentBuffers()) {
|
||||
// If the descriptor set has changed, track new resource usage.
|
||||
if (dsChanged) {
|
||||
auto& usageDirty = _metalUsageDirtyDescriptors[descSetIndex];
|
||||
usageDirty.resize(descSet->getDescriptorCount());
|
||||
usageDirty.setAllBits();
|
||||
}
|
||||
|
||||
// Update dynamic buffer offsets
|
||||
uint32_t baseDynOfstIdx = dslMTLRezIdxOffsets.getMetalResourceIndexs().dynamicOffsetBufferIndex;
|
||||
uint32_t doCnt = descSet->getDynamicOffsetDescriptorCount();
|
||||
for (uint32_t doIdx = 0; doIdx < doCnt && dynamicOffsetIndex < dynamicOffsets.size; doIdx++) {
|
||||
updateImplicitBuffer(_dynamicOffsets, baseDynOfstIdx + doIdx, dynamicOffsets[dynamicOffsetIndex++]);
|
||||
}
|
||||
|
||||
MVKCommandEncoderState::markDirty();
|
||||
// If something changed, mark dirty
|
||||
if (dsChanged || doCnt > 0) { MVKCommandEncoderState::markDirty(); }
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user