From f062a644057e94efbf9c39d02da933579b12c800 Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Thu, 29 Sep 2022 17:58:12 +0200 Subject: [PATCH] tu: Implement extendedDynamicState3SampleMask Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.c | 14 ++++++++++++++ src/freedreno/vulkan/tu_device.c | 2 +- src/freedreno/vulkan/tu_pipeline.c | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index 149ccd5..82fb0a7 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -3158,6 +3158,20 @@ tu_CmdSetDepthClampEnableEXT(VkCommandBuffer commandBuffer, cmd->state.dirty |= TU_CMD_DIRTY_RAST | TU_CMD_DIRTY_RB_DEPTH_CNTL; } +VKAPI_ATTR void VKAPI_CALL +tu_CmdSetSampleMaskEXT(VkCommandBuffer commandBuffer, + VkSampleCountFlagBits samples, + const VkSampleMask *pSampleMask) +{ + TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer); + + cmd->state.rb_blend_cntl = + (cmd->state.rb_blend_cntl & ~A6XX_RB_BLEND_CNTL_SAMPLE_MASK__MASK) | + A6XX_RB_BLEND_CNTL_SAMPLE_MASK(*pSampleMask & 0xffff); + + 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 b2a4b7c..e6cab38 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -766,7 +766,7 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->extendedDynamicState3DepthClampEnable = true; features->extendedDynamicState3DepthClipEnable = true; features->extendedDynamicState3LogicOpEnable = true; - features->extendedDynamicState3SampleMask = false; + features->extendedDynamicState3SampleMask = true; features->extendedDynamicState3RasterizationSamples = false; features->extendedDynamicState3AlphaToCoverageEnable = false; features->extendedDynamicState3AlphaToOneEnable = false; diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index 41d32c9..e041e6c 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -3738,6 +3738,11 @@ tu_pipeline_builder_parse_dynamic(struct tu_pipeline_builder *builder, ~A6XX_RB_DEPTH_CNTL_Z_CLAMP_ENABLE; dynamic_depth_clamp = true; break; + case VK_DYNAMIC_STATE_SAMPLE_MASK_EXT: + pipeline->dynamic_state_mask |= BIT(TU_DYNAMIC_STATE_BLEND); + pipeline->blend.rb_blend_cntl_mask &= + ~A6XX_RB_BLEND_CNTL_SAMPLE_MASK__MASK; + break; default: assert(!"unsupported dynamic state"); break; -- 2.7.4