From 92dd505f7cf8b90899eab59c83c550a470a2d6fb Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Fri, 30 Sep 2022 14:07:17 +0200 Subject: [PATCH] tu: Impement extendedDynamicState3RasterizationStream Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.c | 13 +++++++++++++ src/freedreno/vulkan/tu_device.c | 2 +- src/freedreno/vulkan/tu_pipeline.c | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index 04ada5cf55b..4312b4df4bd 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -3255,6 +3255,19 @@ tu_CmdSetDepthClipNegativeOneToOneEXT(VkCommandBuffer commandBuffer, cmd->state.dirty |= TU_CMD_DIRTY_RAST | TU_CMD_DIRTY_VIEWPORTS; } +VKAPI_ATTR void VKAPI_CALL +tu_CmdSetRasterizationStreamEXT(VkCommandBuffer commandBuffer, + uint32_t rasterizationStream) +{ + TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer); + + cmd->state.pc_raster_cntl = + (cmd->state.pc_raster_cntl & ~A6XX_PC_RASTER_CNTL_STREAM__MASK) | + A6XX_PC_RASTER_CNTL_STREAM(rasterizationStream); + + cmd->state.dirty |= TU_CMD_DIRTY_PC_RASTER_CNTL; +} + 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 dcb25dac48f..d946b4c3fbb 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -771,7 +771,7 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->extendedDynamicState3AlphaToCoverageEnable = true; features->extendedDynamicState3AlphaToOneEnable = true; features->extendedDynamicState3DepthClipNegativeOneToOne = true; - features->extendedDynamicState3RasterizationStream = false; + features->extendedDynamicState3RasterizationStream = true; features->extendedDynamicState3ConservativeRasterizationMode = false; features->extendedDynamicState3ExtraPrimitiveOverestimationSize = false; features->extendedDynamicState3LineRasterizationMode = false; diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index ea9a4a4041a..bc1ed9a33f5 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -3772,6 +3772,11 @@ tu_pipeline_builder_parse_dynamic(struct tu_pipeline_builder *builder, ~A6XX_GRAS_CL_CNTL_ZERO_GB_SCALE_Z; dynamic_viewport_range = true; break; + case VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT: + pipeline->dynamic_state_mask |= BIT(TU_DYNAMIC_STATE_PC_RASTER_CNTL); + pipeline->rast.pc_raster_cntl_mask &= + ~A6XX_PC_RASTER_CNTL_STREAM__MASK; + break; default: assert(!"unsupported dynamic state"); break;