Refactor common sampler code

Bug: b/129523279
Change-Id: Id77a2168c11a66dddebf893d1527647b30584832
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/29773
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index 764bd30..1cf08a5 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -40,9 +40,9 @@
 	{
 	}
 
-	Vector4s SamplerCore::sampleTexture(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Float4 &bias, Vector4f &dsx, Vector4f &dsy, Vector4f &offset, SamplerFunction function)
+	Vector4f SamplerCore::sampleTexture(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Float4 &bias, Vector4f &dsx, Vector4f &dsy, Vector4f &offset, SamplerFunction function)
 	{
-		Vector4s c;
+		Vector4f c;
 
 		#if PERF_PROFILE
 			AddAtomic(Pointer<Long>(&profiler.texOperations), 4);
@@ -82,57 +82,12 @@
 			computeLod3D(texture, lod, uuuu, vvvv, wwww, bias.x, dsx, dsy, function);
 		}
 
-		return sampleFilter(texture, uuuu, vvvv, wwww, offset, lod, anisotropy, uDelta, vDelta, face, function);
-	}
-
-	Vector4f SamplerCore::sampleTextureF(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Float4 &bias, Vector4f &dsx, Vector4f &dsy, Vector4f &offset, SamplerFunction function)
-	{
-		Vector4f c;
-
-		#if PERF_PROFILE
-			AddAtomic(Pointer<Long>(&profiler.texOperations), 4);
-
-			if(state.compressedFormat)
-			{
-				AddAtomic(Pointer<Long>(&profiler.compressedTex), 4);
-			}
-		#endif
-
 		// FIXME: YUV is not supported by the floating point path
 		bool forceFloatFiltering = state.highPrecisionFiltering && !hasYuvFormat() && (state.textureFilter != FILTER_POINT);
 		bool seamlessCube = (state.addressingModeU == ADDRESSING_SEAMLESS);
 		bool rectangleTexture = (state.textureType == TEXTURE_RECTANGLE);
 		if(hasFloatTexture() || hasUnnormalizedIntegerTexture() || forceFloatFiltering || seamlessCube || rectangleTexture)   // FIXME: Mostly identical to integer sampling
 		{
-			Float4 uuuu = u;
-			Float4 vvvv = v;
-			Float4 wwww = w;
-			Float4 qqqq = q;
-
-			Int face[4];
-			Float lod;
-			Float anisotropy;
-			Float4 uDelta;
-			Float4 vDelta;
-
-			if(state.textureType != TEXTURE_3D)
-			{
-				if(state.textureType != TEXTURE_CUBE)
-				{
-					computeLod(texture, lod, anisotropy, uDelta, vDelta, uuuu, vvvv, bias.x, dsx, dsy, function);
-				}
-				else
-				{
-					Float4 M;
-					cubeFace(face, uuuu, vvvv, u, v, w, M);
-					computeLodCube(texture, lod, u, v, w, bias.x, dsx, dsy, M, function);
-				}
-			}
-			else
-			{
-				computeLod3D(texture, lod, uuuu, vvvv, wwww, bias.x, dsx, dsy, function);
-			}
-
 			c = sampleFloatFilter(texture, uuuu, vvvv, wwww, qqqq, offset, lod, anisotropy, uDelta, vDelta, face, function);
 
 			if(!hasFloatTexture() && !hasUnnormalizedIntegerTexture())
@@ -161,7 +116,7 @@
 		}
 		else
 		{
-			Vector4s cs = sampleTexture(texture, u, v, w, q, bias, dsx, dsy, offset, function);
+			Vector4s cs = sampleFilter(texture, uuuu, vvvv, wwww, offset, lod, anisotropy, uDelta, vDelta, face, function);
 
 			if(state.textureFormat ==  VK_FORMAT_R5G6B5_UNORM_PACK16)
 			{
diff --git a/src/Pipeline/SamplerCore.hpp b/src/Pipeline/SamplerCore.hpp
index 0ab2a1e..969a117 100644
--- a/src/Pipeline/SamplerCore.hpp
+++ b/src/Pipeline/SamplerCore.hpp
@@ -50,11 +50,9 @@
 	public:
 		SamplerCore(Pointer<Byte> &constants, const Sampler::State &state);
 
-		Vector4f sampleTextureF(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Float4 &bias, Vector4f &dsx, Vector4f &dsy, Vector4f &offset, SamplerFunction function);
+		Vector4f sampleTexture(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Float4 &bias, Vector4f &dsx, Vector4f &dsy, Vector4f &offset, SamplerFunction function);
 
 	private:
-		Vector4s sampleTexture(Pointer<Byte> &texture, Float4 &u, Float4 &v, Float4 &w, Float4 &q, Float4 &bias, Vector4f &dsx, Vector4f &dsy, Vector4f &offset, SamplerFunction function);
-
 		void border(Short4 &mask, Float4 &coordinates);
 		void border(Int4 &mask, Float4 &coordinates);
 		Short4 offsetSample(Short4 &uvw, Pointer<Byte> &mipmap, int halfOffset, bool wrap, int count, Float &lod);
diff --git a/src/Pipeline/SpirvShaderSampling.cpp b/src/Pipeline/SpirvShaderSampling.cpp
index 6fc587a..5921e55 100644
--- a/src/Pipeline/SpirvShaderSampling.cpp
+++ b/src/Pipeline/SpirvShaderSampling.cpp
@@ -108,25 +108,13 @@
 	Vector4f offset;      // TODO(b/129523279)
 	SamplerFunction samplerFunction = { Implicit, None };  // ASSERT(insn.wordCount() == 5);  // TODO(b/129523279)
 
-	Vector4f sample = s.sampleTextureF(texture, u, v, w, q, bias, dsx, dsy, offset, samplerFunction);
+	Vector4f sample = s.sampleTexture(texture, u, v, w, q, bias, dsx, dsy, offset, samplerFunction);
 
-	if(!vk::Format(imageView->getFormat()).isNonNormalizedInteger())
-	{
-		Pointer<SIMD::Float> rgba = out;
-		rgba[0] = sample.x;
-		rgba[1] = sample.y;
-		rgba[2] = sample.z;
-		rgba[3] = sample.w;
-	}
-	else
-	{
-		// TODO(b/129523279): Add a Sampler::sampleTextureI() method.
-		Pointer<SIMD::Int> rgba = out;
-		rgba[0] = As<SIMD::Int>(sample.x * SIMD::Float(0xFF));
-		rgba[1] = As<SIMD::Int>(sample.y * SIMD::Float(0xFF));
-		rgba[2] = As<SIMD::Int>(sample.z * SIMD::Float(0xFF));
-		rgba[3] = As<SIMD::Int>(sample.w * SIMD::Float(0xFF));
-	}
+	Pointer<SIMD::Float> rgba = out;
+	rgba[0] = sample.x;
+	rgba[1] = sample.y;
+	rgba[2] = sample.z;
+	rgba[3] = sample.w;
 }
 
 sw::FilterType SpirvShader::convertFilterMode(const vk::Sampler *sampler)