From e32d17def791a0165e1eb0e2872d564f463cc1a5 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 17 Nov 2022 10:35:49 -0600 Subject: [PATCH] vulkan: Add state for extraPrimitiveOverestimationSize Fixes: 13c422e1b2ed ("anv: toggle on EXT_extended_dynamic_state3") Reviewed-by: Lionel Landwerlin Part-of: (cherry picked from commit b172fd62f51bba16970c413604053a64f7eda244) --- .pick_status.json | 2 +- src/vulkan/runtime/vk_graphics_state.c | 18 ++++++++++++++++++ src/vulkan/runtime/vk_graphics_state.h | 7 +++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index a40859e..5b660c3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -697,7 +697,7 @@ "description": "vulkan: Add state for extraPrimitiveOverestimationSize", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "13c422e1b2ede25410034fdaf29a632061990fc0" }, diff --git a/src/vulkan/runtime/vk_graphics_state.c b/src/vulkan/runtime/vk_graphics_state.c index 06f625b..63eb299 100644 --- a/src/vulkan/runtime/vk_graphics_state.c +++ b/src/vulkan/runtime/vk_graphics_state.c @@ -489,6 +489,7 @@ vk_rasterization_state_init(struct vk_rasterization_state *rs, *rs = (struct vk_rasterization_state) { .rasterizer_discard_enable = false, .conservative_mode = VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT, + .extra_primitive_overestimation_size = 0.0f, .rasterization_order_amd = VK_RASTERIZATION_ORDER_STRICT_AMD, .provoking_vertex = VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, .line.mode = VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, @@ -535,6 +536,8 @@ vk_rasterization_state_init(struct vk_rasterization_state *rs, const VkPipelineRasterizationConservativeStateCreateInfoEXT *rcs_info = (const VkPipelineRasterizationConservativeStateCreateInfoEXT *)ext; rs->conservative_mode = rcs_info->conservativeRasterizationMode; + rs->extra_primitive_overestimation_size = + rcs_info->extraPrimitiveOverestimationSize; break; } @@ -1662,6 +1665,8 @@ vk_dynamic_graphics_state_copy(struct vk_dynamic_graphics_state *dst, COPY_IF_SET(RS_CULL_MODE, rs.cull_mode); COPY_IF_SET(RS_FRONT_FACE, rs.front_face); COPY_IF_SET(RS_CONSERVATIVE_MODE, rs.conservative_mode); + COPY_IF_SET(RS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE, + rs.extra_primitive_overestimation_size); COPY_IF_SET(RS_RASTERIZATION_ORDER_AMD, rs.rasterization_order_amd); COPY_IF_SET(RS_PROVOKING_VERTEX, rs.provoking_vertex); COPY_IF_SET(RS_RASTERIZATION_STREAM, rs.rasterization_stream); @@ -2043,6 +2048,19 @@ vk_common_CmdSetConservativeRasterizationModeEXT( } VKAPI_ATTR void VKAPI_CALL +vk_common_CmdSetExtraPrimitiveOverestimationSizeEXT( + VkCommandBuffer commandBuffer, + float extraPrimitiveOverestimationSize) +{ + VK_FROM_HANDLE(vk_command_buffer, cmd, commandBuffer); + struct vk_dynamic_graphics_state *dyn = &cmd->dynamic_graphics_state; + + SET_DYN_VALUE(dyn, RS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE, + rs.extra_primitive_overestimation_size, + extraPrimitiveOverestimationSize); +} + +VKAPI_ATTR void VKAPI_CALL vk_common_CmdSetProvokingVertexModeEXT(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode) { diff --git a/src/vulkan/runtime/vk_graphics_state.h b/src/vulkan/runtime/vk_graphics_state.h index 186b00c..debbc9d 100644 --- a/src/vulkan/runtime/vk_graphics_state.h +++ b/src/vulkan/runtime/vk_graphics_state.h @@ -64,6 +64,7 @@ enum mesa_vk_dynamic_graphics_state { MESA_VK_DYNAMIC_RS_CULL_MODE, MESA_VK_DYNAMIC_RS_FRONT_FACE, MESA_VK_DYNAMIC_RS_CONSERVATIVE_MODE, + MESA_VK_DYNAMIC_RS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE, MESA_VK_DYNAMIC_RS_RASTERIZATION_ORDER_AMD, MESA_VK_DYNAMIC_RS_PROVOKING_VERTEX, MESA_VK_DYNAMIC_RS_RASTERIZATION_STREAM, @@ -271,6 +272,12 @@ struct vk_rasterization_state { */ VkConservativeRasterizationModeEXT conservative_mode; + /** VkPipelineRasterizationConservativeStateCreateInfoEXT::extraPrimitiveOverestimationSize + * + * MESA_VK_DYNAMIC_RS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE + */ + float extra_primitive_overestimation_size; + /** VkPipelineRasterizationStateRasterizationOrderAMD::rasterizationOrder */ VkRasterizationOrderAMD rasterization_order_amd; -- 2.7.4