Remove index parameter for SPIR-V pointer operands
SPIR-V pointer objects consist of a single element, so there is no need
for an index parameter like for numerical or Boolean types. Vectors and
matrices can only consist of the latter, not pointers.
Bug: b/184952772
Change-Id: Ie760f2915577a5cf11bd63cdf49913997943b17f
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/67989
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 2ce828e..dae58d1 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -2655,11 +2655,11 @@
auto src = Operand(this, state, insn.word(3));
if(src.isPointer())
{
- state->createPointer(insn.resultId(), src.Pointer(0));
+ state->createPointer(insn.resultId(), src.Pointer());
}
else if(src.isSampledImage())
{
- state->createSampledImage(insn.resultId(), src.SampledImage(0));
+ state->createSampledImage(insn.resultId(), src.SampledImage());
}
else
{
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index cc204fd..b25c131 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -1269,11 +1269,11 @@
return SIMD::UInt(constant[i]);
}
- const SIMD::Pointer &Pointer(uint32_t i) const
+ const SIMD::Pointer &Pointer() const
{
ASSERT(intermediate == nullptr);
- return pointer[i];
+ return *pointer;
}
bool isPointer() const
@@ -1281,11 +1281,11 @@
return (pointer != nullptr);
}
- const SampledImagePointer &SampledImage(uint32_t i) const
+ const SampledImagePointer &SampledImage() const
{
ASSERT(intermediate == nullptr);
- return sampledImage[i];
+ return *sampledImage;
}
bool isSampledImage() const
diff --git a/src/Pipeline/SpirvShaderArithmetic.cpp b/src/Pipeline/SpirvShaderArithmetic.cpp
index 6c92602..86acfe6 100644
--- a/src/Pipeline/SpirvShaderArithmetic.cpp
+++ b/src/Pipeline/SpirvShaderArithmetic.cpp
@@ -153,7 +153,7 @@
if(sizeof(void *) == 4) // 32-bit pointers
{
SIMD::UInt bits;
- src.Pointer(0).castTo(bits);
+ src.Pointer().castTo(bits);
auto &dst = state->createIntermediate(resultID, 1);
dst.move(0, bits);
@@ -162,7 +162,7 @@
{
ASSERT(sizeof(void *) == 8);
// Casting a 64 bit pointer into 2 32bit integers
- auto &ptr = src.Pointer(0);
+ auto &ptr = src.Pointer();
SIMD::UInt lowerBits, upperBits;
ptr.castTo(lowerBits, upperBits);
diff --git a/src/Pipeline/SpirvShaderMemory.cpp b/src/Pipeline/SpirvShaderMemory.cpp
index 2ebb0d1..476ecf4 100644
--- a/src/Pipeline/SpirvShaderMemory.cpp
+++ b/src/Pipeline/SpirvShaderMemory.cpp
@@ -125,8 +125,9 @@
if(value.isPointer())
{
VisitMemoryObject(pointerId, true, [&](const MemoryElement &el) {
+ ASSERT(el.index == 0);
auto p = GetElementPointer(ptr, el.offset, interleavedByLane);
- p.Store(value.Pointer(el.index), robustness, mask, atomic, memoryOrder);
+ p.Store(value.Pointer(), robustness, mask, atomic, memoryOrder);
});
}
else