Add mode for sample qualifier

The sample qualifier forces the use of per sample rendering,
so this cl adds a mode for it and detects whether the sample
decoration is used in the shader.

Bug: b/171415086
Change-Id: Ic59eb45c41f019859eff01de4bf467284de53c0a
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/51730
Tested-by: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 581511c..8f7a6fb 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -111,6 +111,9 @@
 					case spv::DecorationInputAttachmentIndex:
 						descriptorDecorations[targetId].InputAttachmentIndex = value;
 						break;
+					case spv::DecorationSample:
+						modes.ContainsSampleQualifier = true;
+						break;
 					default:
 						// Only handling descriptor decorations here.
 						break;
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 826aff3..c479588 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -553,6 +553,7 @@
 		bool ContainsKill : 1;
 		bool ContainsControlBarriers : 1;
 		bool NeedsCentroid : 1;
+		bool ContainsSampleQualifier : 1;
 
 		// Compute workgroup dimensions
 		int WorkgroupSizeX = 1;