Handle sampleRateShading parameters

VkPipelineMultisampleStateCreateInfo contains parameters specific
to the sampleRateShading feature. This cl handles these new
parameters (without enabling the sampleRateShading feature).

Bug: b/171415086
Change-Id: I8e895483ab5d27643a2fc59347bb41a51570602d
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/51732
Tested-by: Alexis Hétu <sugoi@google.com>
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Device/Context.cpp b/src/Device/Context.cpp
index e5879d2..8624f96 100644
--- a/src/Device/Context.cpp
+++ b/src/Device/Context.cpp
@@ -409,8 +409,10 @@
 			UNSUPPORTED("pCreateInfo->pMultisampleState->flags %d", int(pCreateInfo->pMultisampleState->flags));
 		}
 
-		if(multisampleState->sampleShadingEnable != VK_FALSE)
+		sampleShadingEnable = (multisampleState->sampleShadingEnable != VK_FALSE);
+		if(sampleShadingEnable)
 		{
+			minSampleShading = multisampleState->minSampleShading;
 			UNSUPPORTED("VkPhysicalDeviceFeatures::sampleRateShading");
 		}
 
diff --git a/src/Device/Context.hpp b/src/Device/Context.hpp
index 637855e..ba2b493 100644
--- a/src/Device/Context.hpp
+++ b/src/Device/Context.hpp
@@ -165,6 +165,8 @@
 
 	inline unsigned int getMultiSampleMask() const { return multiSampleMask; }
 	inline int getSampleCount() const { return sampleCount; }
+	inline bool hasSampleShadingEnabled() const { return sampleShadingEnable; }
+	inline float getMinSampleShading() const { return minSampleShading; }
 	inline bool hasAlphaToCoverage() const { return alphaToCoverage; }
 
 	inline bool hasPrimitiveRestartEnable() const { return primitiveRestartEnable; }
@@ -233,6 +235,9 @@
 	int sampleCount;
 	bool alphaToCoverage;
 
+	bool sampleShadingEnable = false;
+	float minSampleShading = 0.0f;
+
 	bool primitiveRestartEnable = false;
 	VkRect2D scissor;
 	VkViewport viewport;
diff --git a/src/Device/PixelProcessor.cpp b/src/Device/PixelProcessor.cpp
index 72a86f3..16afb8a 100644
--- a/src/Device/PixelProcessor.cpp
+++ b/src/Device/PixelProcessor.cpp
@@ -137,6 +137,8 @@
 	state.multiSampleMask = pipelineState.getMultiSampleMask();
 	state.enableMultiSampling = (state.multiSampleCount > 1) &&
 	                            !(pipelineState.isDrawLine(true) && (pipelineState.getLineRasterizationMode() == VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT));
+	state.sampleShadingEnabled = pipelineState.hasSampleShadingEnabled();
+	state.minSampleShading = pipelineState.getMinSampleShading();
 
 	if(state.enableMultiSampling && fragmentShader)
 	{
diff --git a/src/Device/PixelProcessor.hpp b/src/Device/PixelProcessor.hpp
index 328197e..b2ae47c 100644
--- a/src/Device/PixelProcessor.hpp
+++ b/src/Device/PixelProcessor.hpp
@@ -89,6 +89,8 @@
 		bool enableMultiSampling;
 		bool alphaToCoverage;
 		bool centroid;
+		bool sampleShadingEnabled;
+		float minSampleShading;
 		VkFrontFace frontFace;
 		vk::Format depthFormat;
 		bool depthBias;