diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index b7071158e82..878e6e5d442 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -3215,6 +3215,19 @@ tu_CmdSetAlphaToCoverageEnableEXT(VkCommandBuffer commandBuffer, cmd->state.dirty |= TU_CMD_DIRTY_BLEND; } +VKAPI_ATTR void VKAPI_CALL +tu_CmdSetAlphaToOneEnableEXT(VkCommandBuffer commandBuffer, + VkBool32 alphaToOneEnable) +{ + TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer); + + cmd->state.rb_blend_cntl = + (cmd->state.rb_blend_cntl & ~A6XX_RB_BLEND_CNTL_ALPHA_TO_ONE) | + COND(alphaToOneEnable, A6XX_RB_BLEND_CNTL_ALPHA_TO_ONE); + + cmd->state.dirty |= TU_CMD_DIRTY_BLEND; +} + static void tu_flush_for_access(struct tu_cache_state *cache, enum tu_cmd_access_mask src_mask, diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index 2add8d05b5a..92c6f73a4c5 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -769,7 +769,7 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->extendedDynamicState3SampleMask = true; features->extendedDynamicState3RasterizationSamples = true; features->extendedDynamicState3AlphaToCoverageEnable = true; - features->extendedDynamicState3AlphaToOneEnable = false; + features->extendedDynamicState3AlphaToOneEnable = true; features->extendedDynamicState3DepthClipNegativeOneToOne = false; features->extendedDynamicState3RasterizationStream = false; features->extendedDynamicState3ConservativeRasterizationMode = false; diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index 020c0d4b379..706258de49b 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -3754,6 +3754,11 @@ tu_pipeline_builder_parse_dynamic(struct tu_pipeline_builder *builder, pipeline->blend.sp_blend_cntl_mask &= ~A6XX_SP_BLEND_CNTL_ALPHA_TO_COVERAGE; break; + case VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT: + pipeline->dynamic_state_mask |= BIT(TU_DYNAMIC_STATE_BLEND); + pipeline->blend.rb_blend_cntl_mask &= + ~A6XX_RB_BLEND_CNTL_ALPHA_TO_ONE; + break; default: assert(!"unsupported dynamic state"); break;