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;