SpirvShader: Handle DecorationRelaxedPrecision decorations

While not strictly necessary (we could always calculate with the highest precision), it is a tiny amount of work to dramatically increase performance of instructions like InverseSqrt for relaxed precision types.

Bug: b/126873455
Change-Id: I42d5871a8e0886001e85fd4e16f8e6cb309236cf
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28696
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 6180687..d1d416d 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -1133,6 +1133,9 @@
 			HasMatrixStride = true;
 			MatrixStride = static_cast<int32_t>(arg);
 			break;
+		case spv::DecorationRelaxedPrecision:
+			RelaxedPrecision = true;
+			break;
 		default:
 			// Intentionally partial, there are many decorations we just don't care about.
 			break;
@@ -1195,6 +1198,7 @@
 		Centroid |= src.Centroid;
 		Block |= src.Block;
 		BufferBlock |= src.BufferBlock;
+		RelaxedPrecision |= src.RelaxedPrecision;
 	}
 
 	void SpirvShader::ApplyDecorationsForId(Decorations *d, TypeOrObjectID id) const
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 6254af6..f3e3919 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -422,6 +422,7 @@
 			bool HasOffset : 1;
 			bool HasArrayStride : 1;
 			bool HasMatrixStride : 1;
+			bool RelaxedPrecision : 1;
 
 			Decorations()
 					: Location{-1}, Component{0}, DescriptorSet{-1}, Binding{-1},
@@ -431,7 +432,8 @@
 					  HasDescriptorSet{false}, HasBinding{false},
 					  HasBuiltIn{false}, Flat{false}, Centroid{false},
 					  NoPerspective{false}, Block{false}, BufferBlock{false},
-					  HasOffset{false}, HasArrayStride{false}, HasMatrixStride{false}
+					  HasOffset{false}, HasArrayStride{false}, HasMatrixStride{false},
+					  RelaxedPrecision{false}
 			{
 			}