Revert to using MVKBufferDescriptor::_buffRange, and populating

MVKMTLBufferBinding::size to specify the length of shader runtime arrays.
This commit is contained in:
Bill Hollings 2021-03-13 14:03:47 -05:00
parent a2be769e5f
commit 88fcb30090
2 changed files with 16 additions and 0 deletions

View File

@ -234,6 +234,7 @@ public:
protected:
MVKBuffer* _mvkBuffer = nullptr;
VkDeviceSize _buffOffset = 0;
VkDeviceSize _buffRange = 0;
};

View File

@ -161,6 +161,10 @@ void MVKDescriptorSetLayoutBinding::push(MVKCommandEncoder* cmdEncoder,
MVKBuffer* buffer = (MVKBuffer*)bufferInfo.buffer;
bb.mtlBuffer = buffer->getMTLBuffer();
bb.offset = buffer->getMTLBufferOffset() + bufferInfo.offset;
if (bufferInfo.range == VK_WHOLE_SIZE)
bb.size = (uint32_t)(buffer->getByteCount() - bb.offset);
else
bb.size = (uint32_t)bufferInfo.range;
for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
if (_applyToStage[i]) {
@ -207,6 +211,7 @@ void MVKDescriptorSetLayoutBinding::push(MVKCommandEncoder* cmdEncoder,
if (mtlTex.parentTexture) { mtlTex = mtlTex.parentTexture; }
bb.mtlBuffer = mtlTex.buffer;
bb.offset = mtlTex.bufferOffset;
bb.size = (uint32_t)(mtlTex.height * mtlTex.bufferBytesPerRow);
}
for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
if (_applyToStage[i]) {
@ -239,6 +244,7 @@ void MVKDescriptorSetLayoutBinding::push(MVKCommandEncoder* cmdEncoder,
id<MTLTexture> mtlTex = tb.mtlTexture;
bb.mtlBuffer = mtlTex.buffer;
bb.offset = mtlTex.bufferOffset;
bb.size = (uint32_t)(mtlTex.height * mtlTex.bufferBytesPerRow);
}
for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
if (_applyToStage[i]) {
@ -521,6 +527,10 @@ void MVKBufferDescriptor::bind(MVKCommandEncoder* cmdEncoder,
if (_mvkBuffer) {
bb.mtlBuffer = _mvkBuffer->getMTLBuffer();
bb.offset = _mvkBuffer->getMTLBufferOffset() + _buffOffset + bufferDynamicOffset;
if (_buffRange == VK_WHOLE_SIZE)
bb.size = (uint32_t)(_mvkBuffer->getByteCount() - bb.offset);
else
bb.size = (uint32_t)_buffRange;
}
for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
if (stages[i]) {
@ -544,6 +554,7 @@ void MVKBufferDescriptor::write(MVKDescriptorSetLayoutBinding* mvkDSLBind,
const auto* pBuffInfo = &get<VkDescriptorBufferInfo>(pData, stride, srcIndex);
_mvkBuffer = (MVKBuffer*)pBuffInfo->buffer;
_buffOffset = pBuffInfo->offset;
_buffRange = pBuffInfo->range;
if (_mvkBuffer) { _mvkBuffer->retain(); }
if (oldBuff) { oldBuff->release(); }
@ -559,12 +570,14 @@ void MVKBufferDescriptor::read(MVKDescriptorSetLayoutBinding* mvkDSLBind,
auto& buffInfo = pBufferInfo[dstIndex];
buffInfo.buffer = (VkBuffer)_mvkBuffer;
buffInfo.offset = _buffOffset;
buffInfo.range = _buffRange;
}
void MVKBufferDescriptor::reset() {
if (_mvkBuffer) { _mvkBuffer->release(); }
_mvkBuffer = nullptr;
_buffOffset = 0;
_buffRange = 0;
MVKDescriptor::reset();
}
@ -662,6 +675,7 @@ void MVKImageDescriptor::bind(MVKCommandEncoder* cmdEncoder,
if (mtlTex.parentTexture) { mtlTex = mtlTex.parentTexture; }
bb.mtlBuffer = mtlTex.buffer;
bb.offset = mtlTex.bufferOffset;
bb.size = (uint32_t)(mtlTex.height * mtlTex.bufferBytesPerRow);
}
for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
if (stages[i]) {
@ -883,6 +897,7 @@ void MVKTexelBufferDescriptor::bind(MVKCommandEncoder* cmdEncoder,
id<MTLTexture> mtlTex = tb.mtlTexture;
bb.mtlBuffer = mtlTex.buffer;
bb.offset = mtlTex.bufferOffset;
bb.size = (uint32_t)(mtlTex.height * mtlTex.bufferBytesPerRow);
}
}
for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {