Enable the sampleRateShading feature

This cl enables the sampleRateShading feature.

New test failures caused by enabling sampleRateShading:
Tests: dEQP-VK.glsl.builtin_var.fragdepth.*

List of affected tests now passing:
Tests: dEQP-VK.glsl.builtin_var.fragcoord_msaa.*
Tests: dEQP-VK.pipeline.multisample.min_sample_shading.*.samples_4.*
Tests: dEQP-VK.pipeline.multisample.mixed_count.*
Tests: dEQP-VK.pipeline.multisample.variable_rate.*
Tests: dEQP-VK.pipeline.multisample_interpolation.*.samples_4
Tests: dEQP-VK.pipeline.multisample_interpolation.sample_interpolate_at_single_sample.*.samples_1
Tests: dEQP-VK.pipeline.multisample_shader_builtin.*.samples_4
Tests: dEQP-VK.pipeline.multisample_shader_builtin.write_sample_mask.*
Tests: dEQP-VK.renderpass.suballocation.sampleread.numsamples_4.*
Tests: dEQP-VK.renderpass2.suballocation.sampleread.numsamples_4.*

Bug: b/171415086
Change-Id: I1aa50cff9e2fada482ceef594c59641c7243b563
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/51469
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
Commit-Queue: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Device/Context.cpp b/src/Device/Context.cpp
index 8624f96..df37f02 100644
--- a/src/Device/Context.cpp
+++ b/src/Device/Context.cpp
@@ -413,7 +413,6 @@
 		if(sampleShadingEnable)
 		{
 			minSampleShading = multisampleState->minSampleShading;
-			UNSUPPORTED("VkPhysicalDeviceFeatures::sampleRateShading");
 		}
 
 		if(multisampleState->alphaToOneEnable != VK_FALSE)
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 66f0e21..9f33153 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -387,6 +387,7 @@
 					case spv::CapabilityClipDistance: capabilities.ClipDistance = true; break;
 					case spv::CapabilityCullDistance: capabilities.CullDistance = true; break;
 					case spv::CapabilityImageCubeArray: capabilities.ImageCubeArray = true; break;
+					case spv::CapabilitySampleRateShading: capabilities.SampleRateShading = true; break;
 					case spv::CapabilityInputAttachment: capabilities.InputAttachment = true; break;
 					case spv::CapabilitySampled1D: capabilities.Sampled1D = true; break;
 					case spv::CapabilityImage1D: capabilities.Image1D = true; break;
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 7af156a..bae56c5 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -574,6 +574,7 @@
 		bool ClipDistance : 1;
 		bool CullDistance : 1;
 		bool ImageCubeArray : 1;
+		bool SampleRateShading : 1;
 		bool InputAttachment : 1;
 		bool Sampled1D : 1;
 		bool Image1D : 1;
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp
index f09addf..419e753 100644
--- a/src/Vulkan/VkPhysicalDevice.cpp
+++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -51,7 +51,7 @@
 		VK_TRUE,   // independentBlend
 		VK_FALSE,  // geometryShader
 		VK_FALSE,  // tessellationShader
-		VK_FALSE,  // sampleRateShading
+		VK_TRUE,   // sampleRateShading
 		VK_FALSE,  // dualSrcBlend
 		VK_FALSE,  // logicOp
 		VK_TRUE,   // multiDrawIndirect