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