From: Connor Abbott Date: Thu, 29 Sep 2022 16:59:02 +0000 (+0200) Subject: tu: Implement extendedDynamicState3RasterizationSamples X-Git-Tag: upstream/23.3.3~17441 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5e362c82c88fe16c3806d9c414f9ed1c86b42ec5;p=platform%2Fupstream%2Fmesa.git tu: Implement extendedDynamicState3RasterizationSamples Part-of: --- diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index 73c0489..60ddfa0 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -2631,7 +2631,8 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer, tu6_update_msaa_disable(cmd); - tu6_update_msaa_samples(cmd, pipeline->output.samples); + if (!(pipeline->dynamic_state_mask & BIT(TU_DYNAMIC_STATE_MSAA_SAMPLES))) + tu6_update_msaa_samples(cmd, pipeline->output.samples); if ((pipeline->dynamic_state_mask & BIT(VK_DYNAMIC_STATE_VIEWPORT)) && (pipeline->viewport.z_negative_one_to_one != cmd->state.z_negative_one_to_one)) { @@ -3188,6 +3189,15 @@ tu_CmdSetSampleMaskEXT(VkCommandBuffer commandBuffer, cmd->state.dirty |= TU_CMD_DIRTY_BLEND; } +VKAPI_ATTR void VKAPI_CALL +tu_CmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, + VkSampleCountFlagBits rasterizationSamples) +{ + TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer); + + tu6_update_msaa_samples(cmd, rasterizationSamples); +} + 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 e6cab38..8f3fe44 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -767,7 +767,7 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->extendedDynamicState3DepthClipEnable = true; features->extendedDynamicState3LogicOpEnable = true; features->extendedDynamicState3SampleMask = true; - features->extendedDynamicState3RasterizationSamples = false; + features->extendedDynamicState3RasterizationSamples = true; features->extendedDynamicState3AlphaToCoverageEnable = false; features->extendedDynamicState3AlphaToOneEnable = false; features->extendedDynamicState3DepthClipNegativeOneToOne = false; diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index a632dde..4cd13a3 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -3742,6 +3742,9 @@ tu_pipeline_builder_parse_dynamic(struct tu_pipeline_builder *builder, pipeline->blend.rb_blend_cntl_mask &= ~A6XX_RB_BLEND_CNTL_SAMPLE_MASK__MASK; break; + case VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT: + pipeline->dynamic_state_mask |= BIT(TU_DYNAMIC_STATE_MSAA_SAMPLES); + break; default: assert(!"unsupported dynamic state"); break; @@ -3835,7 +3838,8 @@ tu_pipeline_builder_parse_libraries(struct tu_pipeline_builder *builder, BIT(TU_DYNAMIC_STATE_BLEND) | BIT(TU_DYNAMIC_STATE_LOGIC_OP) | BIT(TU_DYNAMIC_STATE_LOGIC_OP_ENABLE) | - BIT(TU_DYNAMIC_STATE_COLOR_WRITE_ENABLE); + BIT(TU_DYNAMIC_STATE_COLOR_WRITE_ENABLE) | + BIT(TU_DYNAMIC_STATE_MSAA_SAMPLES); } if ((library->state & diff --git a/src/freedreno/vulkan/tu_pipeline.h b/src/freedreno/vulkan/tu_pipeline.h index 68db185..3d4b95c 100644 --- a/src/freedreno/vulkan/tu_pipeline.h +++ b/src/freedreno/vulkan/tu_pipeline.h @@ -37,6 +37,7 @@ enum tu_dynamic_state TU_DYNAMIC_STATE_COLOR_WRITE_ENABLE, TU_DYNAMIC_STATE_POLYGON_MODE, TU_DYNAMIC_STATE_TESS_DOMAIN_ORIGIN, + TU_DYNAMIC_STATE_MSAA_SAMPLES, /* re-use the line width enum as it uses GRAS_SU_CNTL: */ TU_DYNAMIC_STATE_RAST = VK_DYNAMIC_STATE_LINE_WIDTH, };