Revert to using MVKBufferDescriptor::_buffRange, and populating
MVKMTLBufferBinding::size to specify the length of shader runtime arrays.
This commit is contained in:
parent
a2be769e5f
commit
88fcb30090
@ -234,6 +234,7 @@ public:
|
||||
protected:
|
||||
MVKBuffer* _mvkBuffer = nullptr;
|
||||
VkDeviceSize _buffOffset = 0;
|
||||
VkDeviceSize _buffRange = 0;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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++) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user