OSDN Git Service

Wire up BuiltInWorkgroupId to compute pipeline
authorChris Forbes <chrisforbes@google.com>
Tue, 19 Mar 2019 16:06:19 +0000 (09:06 -0700)
committerChris Forbes <chrisforbes@google.com>
Tue, 19 Mar 2019 20:38:13 +0000 (20:38 +0000)
Previously this was left uninitialized, with exciting results
when a shader used it for buffer indexing etc.

Bug: b/126871859
Test: dEQP-VK.*push_constant*
Test: dEQP-VK.glsl.*
Test: dEQP-VK.spirv_assembly.*
Change-Id: I57fb9e22cbe57a87072b1039a7d799bedd28ae91
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/27628
Presubmit-Ready: Chris Forbes <chrisforbes@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Tested-by: Chris Forbes <chrisforbes@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>

src/Pipeline/ComputeProgram.cpp

index d15b8d4..c29a96b 100644 (file)
@@ -77,6 +77,15 @@ namespace sw
                        }
                });
 
+               setInputBuiltin(spv::BuiltInWorkgroupId, [&](const SpirvShader::BuiltinMapping& builtin, Array<SIMD::Float>& value)
+               {
+                       for (uint32_t component = 0; component < builtin.SizeInComponents; component++)
+                       {
+                               value[builtin.FirstComponent + component] =
+                                               As<SIMD::Float>(SIMD::Int(Extract(workgroupID, component)));
+                       }
+               });
+
                setInputBuiltin(spv::BuiltInWorkgroupSize, [&](const SpirvShader::BuiltinMapping& builtin, Array<SIMD::Float>& value)
                {
                        for (uint32_t component = 0; component < builtin.SizeInComponents; component++)