radv: rework dirtying scissors when the line width changes
The guardband state (part of scissors) needs to be re-emitted when the line width changes. Given this is a dynamic state, it's not necessary to look at the pipeline line width. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18247>
This commit is contained in:

committed by
Marge Bot

parent
5bbb7de514
commit
3c2966fa1b
@@ -1429,8 +1429,7 @@ radv_emit_graphics_pipeline(struct radv_cmd_buffer *cmd_buffer)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_VIEWPORT;
|
||||
|
||||
if (!cmd_buffer->state.emitted_graphics_pipeline ||
|
||||
radv_rast_prim_is_points_or_lines(cmd_buffer->state.emitted_graphics_pipeline->rast_prim) != radv_rast_prim_is_points_or_lines(pipeline->rast_prim) ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->line_width != pipeline->line_width)
|
||||
radv_rast_prim_is_points_or_lines(cmd_buffer->state.emitted_graphics_pipeline->rast_prim) != radv_rast_prim_is_points_or_lines(pipeline->rast_prim))
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_SCISSOR;
|
||||
|
||||
if (!cmd_buffer->state.emitted_graphics_pipeline ||
|
||||
@@ -3210,7 +3209,8 @@ radv_cmd_buffer_flush_dynamic_state(struct radv_cmd_buffer *cmd_buffer, bool pip
|
||||
if (states & (RADV_CMD_DIRTY_DYNAMIC_VIEWPORT))
|
||||
radv_emit_viewport(cmd_buffer);
|
||||
|
||||
if (states & (RADV_CMD_DIRTY_DYNAMIC_SCISSOR | RADV_CMD_DIRTY_DYNAMIC_VIEWPORT) &&
|
||||
if (states & (RADV_CMD_DIRTY_DYNAMIC_SCISSOR | RADV_CMD_DIRTY_DYNAMIC_VIEWPORT |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LINE_WIDTH) &&
|
||||
!cmd_buffer->device->physical_device->rad_info.has_gfx9_scissor_bug)
|
||||
radv_emit_scissor(cmd_buffer);
|
||||
|
||||
@@ -5553,9 +5553,6 @@ radv_CmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
|
||||
{
|
||||
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
if (cmd_buffer->state.dynamic.line_width != lineWidth)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_SCISSOR;
|
||||
|
||||
cmd_buffer->state.dynamic.line_width = lineWidth;
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_LINE_WIDTH;
|
||||
}
|
||||
|
@@ -6705,7 +6705,6 @@ radv_graphics_pipeline_init(struct radv_graphics_pipeline *pipeline, struct radv
|
||||
pipeline->base.shaders[pipeline->last_vgt_api_stage]->info.force_vrs_per_vertex;
|
||||
pipeline->uses_user_sample_locations = state.ms && state.ms->sample_locations_enable;
|
||||
pipeline->rast_prim = vgt_gs_out_prim_type;
|
||||
pipeline->line_width = state.rs->line.width;
|
||||
|
||||
pipeline->base.push_constant_size = pipeline_layout.push_constant_size;
|
||||
pipeline->base.dynamic_offset_count = pipeline_layout.dynamic_offset_count;
|
||||
|
@@ -2058,7 +2058,6 @@ struct radv_graphics_pipeline {
|
||||
struct radv_shader *streamout_shader;
|
||||
|
||||
unsigned rast_prim;
|
||||
float line_width;
|
||||
|
||||
/* For vk_graphics_pipeline_state */
|
||||
void *state_data;
|
||||
|
Reference in New Issue
Block a user