Fix passing sampler offset operands unchanged

All sampler operands are passed through an array of float values. Offset
operands are integers, but we were retrieving them from the SPIR-V
constant object interpreted as floating-point data, and then creating
Float constants from them. This may alter their bit pattern,
specifically values corresponding to sNaN may become qNaN.

Instead create Reactor integer constants and bitcast them to Float.

Bug: b/140302841
Change-Id: I06aceb7b2a97d5f5ce9009f5ba97238602cdc126
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35910
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index b725519..0498c6c 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -5108,7 +5108,7 @@
 
 			for(uint32_t j = 0; j < offsetType.sizeInComponents; j++, i++)
 			{
-				in[i] = offsetValue.Float(j);  // Integer values, but transfered as float.
+				in[i] = As<SIMD::Float>(offsetValue.Int(j));  // Integer values, but transfered as float.
 			}
 		}