Fix EmitImageWrite using wrong active lane mask

EmiteImageWrite() was writing to inactive lanes, which was causing several tests to fail. state->activeStoresAndAtomicsMask() returns the proper lane mask. Bug: b/184063472 Tests: dEQP-VK.glsl.builtin_var.fragdepth.* Change-Id: I24882cb963ed30052c4774318e1267041c89ee02 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/54368Tested-by: 's avatarSean Risser <srisser@google.com> Commit-Queue: Sean Risser <srisser@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 0ca03fb2
...@@ -1234,14 +1234,14 @@ SpirvShader::EmitResult SpirvShader::EmitImageWrite(InsnIterator insn, EmitState ...@@ -1234,14 +1234,14 @@ SpirvShader::EmitResult SpirvShader::EmitImageWrite(InsnIterator insn, EmitState
{ {
for(auto i = 0; i < texelSize / 4; i++) for(auto i = 0; i < texelSize / 4; i++)
{ {
texelPtr.Store(packed[i], robustness, state->activeLaneMask()); texelPtr.Store(packed[i], robustness, state->activeStoresAndAtomicsMask());
texelPtr += sizeof(float); texelPtr += sizeof(float);
} }
} }
else if(texelSize == 2) else if(texelSize == 2)
{ {
SIMD::Int offsets = texelPtr.offsets(); SIMD::Int offsets = texelPtr.offsets();
SIMD::Int mask = state->activeLaneMask() & texelPtr.isInBounds(2, robustness); SIMD::Int mask = state->activeStoresAndAtomicsMask() & texelPtr.isInBounds(2, robustness);
for(int i = 0; i < SIMD::Width; i++) for(int i = 0; i < SIMD::Width; i++)
{ {
...@@ -1254,7 +1254,7 @@ SpirvShader::EmitResult SpirvShader::EmitImageWrite(InsnIterator insn, EmitState ...@@ -1254,7 +1254,7 @@ SpirvShader::EmitResult SpirvShader::EmitImageWrite(InsnIterator insn, EmitState
else if(texelSize == 1) else if(texelSize == 1)
{ {
SIMD::Int offsets = texelPtr.offsets(); SIMD::Int offsets = texelPtr.offsets();
SIMD::Int mask = state->activeLaneMask() & texelPtr.isInBounds(1, robustness); SIMD::Int mask = state->activeStoresAndAtomicsMask() & texelPtr.isInBounds(1, robustness);
for(int i = 0; i < SIMD::Width; i++) for(int i = 0; i < SIMD::Width; i++)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment