Support alpha-to-coverage without a color attachment.
If alpha-to-coverage is enabled, we must enable the fragment shader first color output, even without a color attachment present or in use, so that coverage can be calculated.
This commit is contained in:
parent
a7ffaad975
commit
b1a8b59f66
@ -22,6 +22,7 @@ Released TBD
|
|||||||
- Fix swizzle of depth and stencil values into RGBA (`float4`) variable in shaders.
|
- Fix swizzle of depth and stencil values into RGBA (`float4`) variable in shaders.
|
||||||
- Disable `VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT` for
|
- Disable `VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT` for
|
||||||
`VK_FORMAT_E5B9G9R9_UFLOAT_PACK32` on macOS Apple Silicon.
|
`VK_FORMAT_E5B9G9R9_UFLOAT_PACK32` on macOS Apple Silicon.
|
||||||
|
- Support alpha-to-coverage without a color attachment.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1546,7 +1546,12 @@ void MVKGraphicsPipeline::initShaderConversionConfig(SPIRVToMSLConversionConfigu
|
|||||||
MVKPixelFormats* pixFmts = getPixelFormats();
|
MVKPixelFormats* pixFmts = getPixelFormats();
|
||||||
MTLPixelFormat mtlDSFormat = pixFmts->getMTLPixelFormat(mvkRenderSubpass->getDepthStencilFormat());
|
MTLPixelFormat mtlDSFormat = pixFmts->getMTLPixelFormat(mvkRenderSubpass->getDepthStencilFormat());
|
||||||
|
|
||||||
shaderConfig.options.mslOptions.enable_frag_output_mask = 0;
|
// Disable any unused color attachments, because Metal validation can complain if the
|
||||||
|
// fragment shader outputs a color value without a corresponding color attachment.
|
||||||
|
// However, if alpha-to-coverage is enabled, we must enable the fragment shader first color output,
|
||||||
|
// even without a color attachment present or in use, so that coverage can be calculated.
|
||||||
|
bool hasA2C = pCreateInfo->pMultisampleState && pCreateInfo->pMultisampleState->alphaToCoverageEnable;
|
||||||
|
shaderConfig.options.mslOptions.enable_frag_output_mask = hasA2C ? 1 : 0;
|
||||||
if (pCreateInfo->pColorBlendState) {
|
if (pCreateInfo->pColorBlendState) {
|
||||||
for (uint32_t caIdx = 0; caIdx < pCreateInfo->pColorBlendState->attachmentCount; caIdx++) {
|
for (uint32_t caIdx = 0; caIdx < pCreateInfo->pColorBlendState->attachmentCount; caIdx++) {
|
||||||
if (mvkRenderSubpass->isColorAttachmentUsed(caIdx)) {
|
if (mvkRenderSubpass->isColorAttachmentUsed(caIdx)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user