Fix interaction between Dref and explicit lod
Test: dEQP-VK.glsl.texture_functions.*
Change-Id: I326ccb88b0f93168d2f005abbc083d93ae239c3f
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31049
Tested-by: Chris Forbes <chrisforbes@google.com>
Presubmit-Ready: Chris Forbes <chrisforbes@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index f59ce6b..a8e8a9f 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -4628,7 +4628,8 @@
SpirvShader::EmitResult SpirvShader::EmitImageSampleExplicitLod(Variant variant, InsnIterator insn, EmitState *state) const
{
- uint32_t imageOperands = static_cast<spv::ImageOperandsMask>(insn.word(5));
+ auto isDref = (variant == Dref) || (variant == ProjDref);
+ uint32_t imageOperands = static_cast<spv::ImageOperandsMask>(insn.word(isDref ? 6 : 5));
imageOperands &= ~spv::ImageOperandsConstOffsetMask; // Dealt with later.
if((imageOperands & spv::ImageOperandsLodMask) == imageOperands)