From b958323194b600fa4ee53aa7c22eb5cae78c5e3e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 7 May 2021 18:07:12 +0200 Subject: [PATCH] radv: fix extending the dirty bits to 64-bit New dynamic states added for VK_EXT_extended_dynamic_state2 causes GPU hangs with vkd3d-proton. Fixes: 7bdd569d7e1 ("radv: extend the dirty bits to 64-bit") Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: (cherry picked from commit 54b0cfb061ec393abdd9cf5bc7f43cb898c8fd4d) --- .pick_status.json | 2 +- src/amd/vulkan/radv_cmd_buffer.c | 6 +++--- src/amd/vulkan/radv_private.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index fed9b9a4763..c68ee44e4af 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -958,7 +958,7 @@ "description": "radv: fix extending the dirty bits to 64-bit", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "7bdd569d7e12143dc576d63606772b493a80f257" }, diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index bdac6f9f07d..27b016de4d4 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -1416,7 +1416,7 @@ radv_emit_line_stipple(struct radv_cmd_buffer *cmd_buffer) } static void -radv_emit_culling(struct radv_cmd_buffer *cmd_buffer, uint32_t states) +radv_emit_culling(struct radv_cmd_buffer *cmd_buffer, uint64_t states) { unsigned pa_su_sc_mode_cntl = cmd_buffer->state.pipeline->graphics.pa_su_sc_mode_cntl; struct radv_dynamic_state *d = &cmd_buffer->state.dynamic; @@ -1451,7 +1451,7 @@ radv_emit_primitive_topology(struct radv_cmd_buffer *cmd_buffer) } static void -radv_emit_depth_control(struct radv_cmd_buffer *cmd_buffer, uint32_t states) +radv_emit_depth_control(struct radv_cmd_buffer *cmd_buffer, uint64_t states) { unsigned db_depth_control = cmd_buffer->state.pipeline->graphics.db_depth_control; struct radv_dynamic_state *d = &cmd_buffer->state.dynamic; @@ -2509,7 +2509,7 @@ radv_set_db_count_control(struct radv_cmd_buffer *cmd_buffer) static void radv_cmd_buffer_flush_dynamic_state(struct radv_cmd_buffer *cmd_buffer) { - uint32_t states = + uint64_t states = cmd_buffer->state.dirty & cmd_buffer->state.emitted_pipeline->graphics.needed_dynamic_state; if (states & (RADV_CMD_DIRTY_DYNAMIC_VIEWPORT)) diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 9c5104558d5..40a14322992 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -1704,7 +1704,7 @@ struct radv_pipeline { bool uses_drawid; bool uses_baseinstance; bool can_use_guardband; - uint32_t needed_dynamic_state; + uint64_t needed_dynamic_state; bool disable_out_of_order_rast_for_occlusion; unsigned tess_patch_control_points; unsigned pa_su_sc_mode_cntl;