aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk
diff options
context:
space:
mode:
authorGravatar ethannicholas <ethannicholas@google.com>2016-03-25 09:26:03 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-25 09:26:03 -0700
commit28ef445d2e55ada7a45fd74e9248b4f22b16e061 (patch)
tree1059a795d12552e4b7207b83143b7d99c320cca1 /src/gpu/vk
parent5443f1b6bab26e0ee010d8b255f9ab6498a096ea (diff)
added support for glMinSampleShading
Diffstat (limited to 'src/gpu/vk')
-rw-r--r--src/gpu/vk/GrVkCaps.cpp1
-rw-r--r--src/gpu/vk/GrVkPipeline.cpp12
2 files changed, 9 insertions, 4 deletions
diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp
index 89a5a73042..3126ca0f1d 100644
--- a/src/gpu/vk/GrVkCaps.cpp
+++ b/src/gpu/vk/GrVkCaps.cpp
@@ -116,6 +116,7 @@ void GrVkCaps::initGrCaps(const VkPhysicalDeviceProperties& properties,
fStencilWrapOpsSupport = true;
fOversizedStencilSupport = true;
+ fSampleShadingSupport = SkToBool(featureFlags & kSampleRateShading_GrVkFeatureFlag);
}
void GrVkCaps::initGLSLCaps(const VkPhysicalDeviceProperties& properties,
diff --git a/src/gpu/vk/GrVkPipeline.cpp b/src/gpu/vk/GrVkPipeline.cpp
index 9c0fd28424..794acb077c 100644
--- a/src/gpu/vk/GrVkPipeline.cpp
+++ b/src/gpu/vk/GrVkPipeline.cpp
@@ -203,7 +203,9 @@ void setup_viewport_scissor_state(const GrVkGpu* gpu,
SkASSERT(viewportInfo->viewportCount == viewportInfo->scissorCount);
}
-void setup_multisample_state(const GrPipeline& pipeline,
+void setup_multisample_state(const GrPipeline& pipeline,
+ const GrPrimitiveProcessor& primProc,
+ const GrCaps* caps,
VkPipelineMultisampleStateCreateInfo* multisampleInfo) {
memset(multisampleInfo, 0, sizeof(VkPipelineMultisampleStateCreateInfo));
multisampleInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
@@ -212,8 +214,10 @@ void setup_multisample_state(const GrPipeline& pipeline,
int numSamples = pipeline.getRenderTarget()->numColorSamples();
SkAssertResult(GrSampleCountToVkSampleCount(numSamples,
&multisampleInfo->rasterizationSamples));
- multisampleInfo->sampleShadingEnable = VK_FALSE;
- multisampleInfo->minSampleShading = 0;
+ float sampleShading = primProc.getSampleShading();
+ SkASSERT(sampleShading == 0.0f || caps->sampleShadingSupport());
+ multisampleInfo->sampleShadingEnable = sampleShading > 0.0f;
+ multisampleInfo->minSampleShading = sampleShading;
multisampleInfo->pSampleMask = nullptr;
multisampleInfo->alphaToCoverageEnable = VK_FALSE;
multisampleInfo->alphaToOneEnable = VK_FALSE;
@@ -427,7 +431,7 @@ GrVkPipeline* GrVkPipeline::Create(GrVkGpu* gpu, const GrPipeline& pipeline,
setup_viewport_scissor_state(gpu, pipeline, vkRT, &viewportInfo);
VkPipelineMultisampleStateCreateInfo multisampleInfo;
- setup_multisample_state(pipeline, &multisampleInfo);
+ setup_multisample_state(pipeline, primProc, gpu->caps(), &multisampleInfo);
// We will only have one color attachment per pipeline.
VkPipelineColorBlendAttachmentState attachmentStates[1];