Implement OpImageFetch
Bug: b/129523279
Test: dEQP-VK.image.*
Test: dEQP-VK.texture*
Change-Id: I70a5d6b53d4df09757b092d239b8c7b31bfcecd7
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30068
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Chris Forbes <chrisforbes@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index eb45c6c..65a86b2 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -842,6 +842,7 @@
case spv::OpPhi:
case spv::OpImageSampleImplicitLod:
case spv::OpImageSampleExplicitLod:
+ case spv::OpImageFetch:
case spv::OpImageQuerySize:
case spv::OpImageRead:
case spv::OpImageTexelPointer:
@@ -2390,6 +2391,9 @@
case spv::OpImageSampleExplicitLod:
return EmitImageSampleExplicitLod(insn, state);
+ case spv::OpImageFetch:
+ return EmitImageFetch(insn, state);
+
case spv::OpImageQuerySize:
return EmitImageQuerySize(insn, state);
@@ -4474,6 +4478,11 @@
return EmitResult::Continue;
}
+ SpirvShader::EmitResult SpirvShader::EmitImageFetch(InsnIterator insn, EmitState *state) const
+ {
+ return EmitImageSample({Fetch}, insn, state);
+ }
+
SpirvShader::EmitResult SpirvShader::EmitImageSample(ImageInstruction instruction, InsnIterator insn, EmitState *state) const
{
Type::ID resultTypeId = insn.word(1);
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 600547a..c97d690 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -869,6 +869,7 @@
EmitResult EmitPhi(InsnIterator insn, EmitState *state) const;
EmitResult EmitImageSampleImplicitLod(InsnIterator insn, EmitState *state) const;
EmitResult EmitImageSampleExplicitLod(InsnIterator insn, EmitState *state) const;
+ EmitResult EmitImageFetch(InsnIterator insn, EmitState *state) const;
EmitResult EmitImageSample(ImageInstruction instruction, InsnIterator insn, EmitState *state) const;
EmitResult EmitImageQuerySize(InsnIterator insn, EmitState *state) const;
EmitResult EmitImageRead(InsnIterator insn, EmitState *state) const;
diff --git a/src/Pipeline/SpirvShaderSampling.cpp b/src/Pipeline/SpirvShaderSampling.cpp
index 68710d4..0762ec0 100644
--- a/src/Pipeline/SpirvShaderSampling.cpp
+++ b/src/Pipeline/SpirvShaderSampling.cpp
@@ -277,4 +277,4 @@
}
}
-} // namespace sw
\ No newline at end of file
+} // namespace sw