Produce correct `one` value for integer textures

Test: dEQP-VK.texture.swizzle.component_mapping.*
Bug: b/129523279
Change-Id: Ib4f7cd6c90fe7bde7d1abd2ecf77e3abbe121438
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/29949
Tested-by: Chris Forbes <chrisforbes@google.com>
Presubmit-Ready: Chris Forbes <chrisforbes@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index a6971b9..2d675d6 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -20,7 +20,7 @@
 
 namespace
 {
-	void applySwizzle(VkComponentSwizzle swizzle, sw::Float4& f, const sw::Vector4f& c)
+	void applySwizzle(VkComponentSwizzle swizzle, sw::Float4& f, const sw::Vector4f& c, bool integer)
 	{
 		switch(swizzle)
 		{
@@ -29,7 +29,15 @@
 		case VK_COMPONENT_SWIZZLE_B:  f = c.z; break;
 		case VK_COMPONENT_SWIZZLE_A: f = c.w; break;
 		case VK_COMPONENT_SWIZZLE_ZERO:  f = sw::Float4(0.0f, 0.0f, 0.0f, 0.0f); break;
-		case VK_COMPONENT_SWIZZLE_ONE:   f = sw::Float4(1.0f, 1.0f, 1.0f, 1.0f); break;
+		case VK_COMPONENT_SWIZZLE_ONE:
+			if (integer)
+			{
+				f = rr::As<sw::Float4>(sw::Int4(1.0f, 1.0f, 1.0f, 1.0f));
+			} else
+			{
+				f = sw::Float4(1.0f, 1.0f, 1.0f, 1.0f);
+			}
+			break;
 		default: ASSERT(false);
 		}
 	}
@@ -202,10 +210,11 @@
 			(state.swizzle.a != VK_COMPONENT_SWIZZLE_A))
 		{
 			const Vector4f col(c);
-			applySwizzle(state.swizzle.r, c.x, col);
-			applySwizzle(state.swizzle.g, c.y, col);
-			applySwizzle(state.swizzle.b, c.z, col);
-			applySwizzle(state.swizzle.a, c.w, col);
+			auto integer = hasUnnormalizedIntegerTexture();
+			applySwizzle(state.swizzle.r, c.x, col, integer);
+			applySwizzle(state.swizzle.g, c.y, col, integer);
+			applySwizzle(state.swizzle.b, c.z, col, integer);
+			applySwizzle(state.swizzle.a, c.w, col, integer);
 		}
 
 		return c;