Refactor sampling code

- Sort the coordinates and operands in the same order as for the SPIR-V
  instructions.
- Renamed 'q' to 'dRef'.
- Used integer type for offset operands.
- Renamed 'addressingModeY' to 'addressingModeA'. Note this is only used
  by cube array coordinates. 2D array coordinates use 'addressingModeW'
  at the moment.
- Removed array layer coordinate parameter from 3D sampling.
- Added 'dRef' operand for 3D sampling.

Bug: b/162315264
Change-Id: Ia24aa22a57ba5507aa4c8cf617f49f18ccca59c5
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/47097
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Pipeline/SpirvShaderSampling.cpp b/src/Pipeline/SpirvShaderSampling.cpp
index 07e4d39..0c9c3df 100644
--- a/src/Pipeline/SpirvShaderSampling.cpp
+++ b/src/Pipeline/SpirvShaderSampling.cpp
@@ -51,7 +51,7 @@
 		samplerState.addressingModeU = convertAddressingMode(0, sampler, type);
 		samplerState.addressingModeV = convertAddressingMode(1, sampler, type);
 		samplerState.addressingModeW = convertAddressingMode(2, sampler, type);
-		samplerState.addressingModeY = convertAddressingMode(3, sampler, type);
+		samplerState.addressingModeA = convertAddressingMode(3, sampler, type);
 
 		samplerState.mipmapFilter = convertMipmapMode(sampler);
 		samplerState.swizzle = imageDescriptor->swizzle;
@@ -104,24 +104,24 @@
 		Pointer<SIMD::Float> out = function.Arg<2>();
 		Pointer<Byte> constants = function.Arg<3>();
 
-		SIMD::Float uvw[4] = { 0, 0, 0, 0 };
-		SIMD::Float q = 0;
+		SIMD::Float uvwa[4] = { 0, 0, 0, 0 };
+		SIMD::Float dRef = 0;
 		SIMD::Float lodOrBias = 0;  // Explicit level-of-detail, or bias added to the implicit level-of-detail (depending on samplerMethod).
 		Vector4f dsx = { 0, 0, 0, 0 };
 		Vector4f dsy = { 0, 0, 0, 0 };
-		Vector4f offset = { 0, 0, 0, 0 };
+		Vector4i offset = { 0, 0, 0, 0 };
 		SIMD::Int sampleId = 0;
 		SamplerFunction samplerFunction = instruction.getSamplerFunction();
 
 		uint32_t i = 0;
 		for(; i < instruction.coordinates; i++)
 		{
-			uvw[i] = in[i];
+			uvwa[i] = in[i];
 		}
 
 		if(instruction.isDref())
 		{
-			q = in[i];
+			dRef = in[i];
 			i++;
 		}
 
@@ -129,12 +129,12 @@
 		// Implement optimized 1D sampling.
 		if(samplerState.textureType == VK_IMAGE_VIEW_TYPE_1D)
 		{
-			uvw[1] = SIMD::Float(0);
+			uvwa[1] = SIMD::Float(0);
 		}
 		else if(samplerState.textureType == VK_IMAGE_VIEW_TYPE_1D_ARRAY)
 		{
-			uvw[1] = SIMD::Float(0);
-			uvw[2] = in[1];  // Move 1D layer coordinate to 2D layer coordinate index.
+			uvwa[1] = SIMD::Float(0);
+			uvwa[2] = in[1];  // Move 1D layer coordinate to 2D layer coordinate index.
 		}
 
 		if(instruction.samplerMethod == Lod || instruction.samplerMethod == Bias || instruction.samplerMethod == Fetch)
@@ -157,7 +157,7 @@
 
 		for(uint32_t j = 0; j < instruction.offset; j++, i++)
 		{
-			offset[j] = in[i];
+			offset[j] = As<SIMD::Int>(in[i]);
 		}
 
 		if(instruction.sample)
@@ -193,7 +193,7 @@
 					dPdy.y = Float(0.0f);
 				}
 
-				Vector4f sample = s.sampleTexture(texture, uvw, q, lod[i], dPdx, dPdy, offset, sampleId, samplerFunction);
+				Vector4f sample = s.sampleTexture(texture, uvwa, dRef, lod[i], dPdx, dPdy, offset, sampleId, samplerFunction);
 
 				Pointer<Float> rgba = out;
 				rgba[0 * SIMD::Width + i] = Pointer<Float>(&sample.x)[i];
@@ -204,7 +204,7 @@
 		}
 		else
 		{
-			Vector4f sample = s.sampleTexture(texture, uvw, q, lodOrBias.x, (dsx.x), (dsy.x), offset, sampleId, samplerFunction);
+			Vector4f sample = s.sampleTexture(texture, uvwa, dRef, lodOrBias.x, (dsx.x), (dsy.x), offset, sampleId, samplerFunction);
 
 			Pointer<SIMD::Float> rgba = out;
 			rgba[0] = sample.x;