Merge pull request #2222 from aitor-lunarg/main

Allow vertex buffer binding when they are used disregarding implicit buffer index
This commit is contained in:
Bill Hollings 2024-05-04 15:55:33 -04:00 committed by GitHub
commit 75fb9493a6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 4 additions and 1 deletions

View File

@ -430,6 +430,8 @@ protected:
uint32_t _tessCtlPatchOutputBufferIndex = 0;
uint32_t _tessCtlLevelBufferIndex = 0;
static constexpr uint32_t kMVKMaxVertexInputBindingBufferCount = 31u; // Taken from Metal Feature Set Table. Highest value out of all present GPUs
bool _isVertexInputBindingUsed[kMVKMaxVertexInputBindingBufferCount] = { false };
bool _primitiveRestartEnable = true;
bool _hasRasterInfo = false;
bool _needsVertexSwizzleBuffer = false;

View File

@ -1415,6 +1415,7 @@ bool MVKGraphicsPipeline::addVertexInputToPipeline(T* inputDesc,
maxBinding = max(pVKVB->binding, maxBinding);
uint32_t vbIdx = getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding);
_isVertexInputBindingUsed[vbIdx] = true;
auto vbDesc = inputDesc.layouts[vbIdx];
if (isVtxStrideStatic && pVKVB->stride == 0) {
// Stride can't be 0, it will be set later to attributes' maximum offset + size
@ -1842,7 +1843,7 @@ void MVKGraphicsPipeline::initReservedVertexAttributeBufferCount(const VkGraphic
}
bool MVKGraphicsPipeline::isValidVertexBufferIndex(MVKShaderStage stage, uint32_t mtlBufferIndex) {
return mtlBufferIndex < _descriptorBufferCounts.stages[stage] || mtlBufferIndex > getImplicitBufferIndex(stage, 0);
return _isVertexInputBindingUsed[mtlBufferIndex] || mtlBufferIndex < _descriptorBufferCounts.stages[stage] || mtlBufferIndex > getImplicitBufferIndex(stage, 0);
}
// Initializes the vertex attributes in a shader conversion configuration.