From 70324d89e03867bc1ec21737d9c930588411057e Mon Sep 17 00:00:00 2001 From: Antonio Maiorano Date: Fri, 16 Jul 2021 17:30:50 +0000 Subject: [PATCH] Remove TINT_EXPECTS_UBOS_TO_BE_MULTIPLE_OF_16 macro usage This was a temporary measure to be able to roll Tint into Dawn with this change. The macro will be removed in Tint once this lands. Bug: tint:984 Change-Id: If599e92b16b5edd96b357ce5ee57143a2c00e22d Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/58365 Reviewed-by: Austin Eng Reviewed-by: Ben Clayton Reviewed-by: Corentin Wallez Commit-Queue: Antonio Maiorano --- src/dawn_native/metal/CommandBufferMTL.mm | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/dawn_native/metal/CommandBufferMTL.mm b/src/dawn_native/metal/CommandBufferMTL.mm index 176186df3e..65a2178bf0 100644 --- a/src/dawn_native/metal/CommandBufferMTL.mm +++ b/src/dawn_native/metal/CommandBufferMTL.mm @@ -274,7 +274,9 @@ namespace dawn_native { namespace metal { // The lengths of buffers are stored as 32bit integers because that is the width the // MSL code generated by SPIRV-Cross expects. - PerStage> data; + // UBOs require we align the max buffer count to 4 elements (16 bytes). + static constexpr size_t MaxBufferCount = ((kGenericMetalBufferSlots + 3) / 4) * 4; + PerStage> data; void Apply(id render, RenderPipeline* pipeline, @@ -294,10 +296,9 @@ namespace dawn_native { namespace metal { bufferCount += pipeline->GetVertexBufferCount(); } -#ifdef TINT_EXPECTS_UBOS_TO_BE_MULTIPLE_OF_16 bufferCount = Align(bufferCount, 4); ASSERT(bufferCount <= data[SingleShaderStage::Vertex].size()); -#endif + [render setVertexBytes:data[SingleShaderStage::Vertex].data() length:sizeof(uint32_t) * bufferCount atIndex:kBufferLengthBufferSlot]; @@ -306,10 +307,9 @@ namespace dawn_native { namespace metal { if (stagesToApply & wgpu::ShaderStage::Fragment) { uint32_t bufferCount = ToBackend(pipeline->GetLayout()) ->GetBufferBindingCount(SingleShaderStage::Fragment); -#ifdef TINT_EXPECTS_UBOS_TO_BE_MULTIPLE_OF_16 bufferCount = Align(bufferCount, 4); ASSERT(bufferCount <= data[SingleShaderStage::Fragment].size()); -#endif + [render setFragmentBytes:data[SingleShaderStage::Fragment].data() length:sizeof(uint32_t) * bufferCount atIndex:kBufferLengthBufferSlot]; @@ -330,10 +330,9 @@ namespace dawn_native { namespace metal { uint32_t bufferCount = ToBackend(pipeline->GetLayout()) ->GetBufferBindingCount(SingleShaderStage::Compute); -#ifdef TINT_EXPECTS_UBOS_TO_BE_MULTIPLE_OF_16 bufferCount = Align(bufferCount, 4); ASSERT(bufferCount <= data[SingleShaderStage::Compute].size()); -#endif + [compute setBytes:data[SingleShaderStage::Compute].data() length:sizeof(uint32_t) * bufferCount atIndex:kBufferLengthBufferSlot];