mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
radv: dirty states when beginning a cmdbuf instead of when a pipeline is bound
To reduce CPU overhead of radv_emit_graphics_pipeline(). Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20299>
This commit is contained in:
parent
6aaba10c6e
commit
18306d3231
1 changed files with 54 additions and 51 deletions
|
|
@ -1897,61 +1897,31 @@ radv_emit_graphics_pipeline(struct radv_cmd_buffer *cmd_buffer)
|
|||
MAX2(cmd_buffer->scratch_size_per_wave_needed, pipeline->base.scratch_bytes_per_wave);
|
||||
cmd_buffer->scratch_waves_wanted = MAX2(cmd_buffer->scratch_waves_wanted, pipeline->base.max_waves);
|
||||
|
||||
if (!cmd_buffer->state.emitted_graphics_pipeline)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_PRIMITIVE_TOPOLOGY |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BOUNDS |
|
||||
RADV_CMD_DIRTY_DYNAMIC_PRIMITIVE_RESTART_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_TEST_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_WRITE_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_COMPARE_OP |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_STENCIL_TEST_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_STENCIL_OP |
|
||||
RADV_CMD_DIRTY_DYNAMIC_PATCH_CONTROL_POINTS |
|
||||
RADV_CMD_DIRTY_DYNAMIC_ALPHA_TO_COVERAGE_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_RASTERIZER_DISCARD_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_CLIP_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_CULL_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_FRONT_FACE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS |
|
||||
RADV_CMD_DIRTY_DYNAMIC_POLYGON_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_PROVOKING_VERTEX_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_VIEWPORT |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_CLAMP_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_COLOR_WRITE_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LINE_STIPPLE_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_CONSERVATIVE_RAST_MODE;
|
||||
if (cmd_buffer->state.emitted_graphics_pipeline) {
|
||||
if (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_GUARDBAND;
|
||||
|
||||
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.dirty |= RADV_CMD_DIRTY_GUARDBAND;
|
||||
if (cmd_buffer->state.emitted_graphics_pipeline->disable_dual_quad != pipeline->disable_dual_quad ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->custom_blend_mode != pipeline->custom_blend_mode)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_LOGIC_OP |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LOGIC_OP_ENABLE;
|
||||
|
||||
if (!cmd_buffer->state.emitted_graphics_pipeline ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->disable_dual_quad != pipeline->disable_dual_quad ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->custom_blend_mode != pipeline->custom_blend_mode)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_LOGIC_OP |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LOGIC_OP_ENABLE;
|
||||
if (cmd_buffer->state.emitted_graphics_pipeline->vgt_tf_param != pipeline->vgt_tf_param)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_TESS_DOMAIN_ORIGIN;
|
||||
|
||||
if (!cmd_buffer->state.emitted_graphics_pipeline ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->vgt_tf_param != pipeline->vgt_tf_param)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_TESS_DOMAIN_ORIGIN;
|
||||
if (memcmp(cmd_buffer->state.emitted_graphics_pipeline->cb_blend_control,
|
||||
pipeline->cb_blend_control, sizeof(pipeline->cb_blend_control)) ||
|
||||
memcmp(cmd_buffer->state.emitted_graphics_pipeline->sx_mrt_blend_opt,
|
||||
pipeline->sx_mrt_blend_opt, sizeof(pipeline->sx_mrt_blend_opt)))
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_COLOR_BLEND_ENABLE;
|
||||
|
||||
if (!cmd_buffer->state.emitted_graphics_pipeline ||
|
||||
memcmp(cmd_buffer->state.emitted_graphics_pipeline->cb_blend_control,
|
||||
pipeline->cb_blend_control, sizeof(pipeline->cb_blend_control)) ||
|
||||
memcmp(cmd_buffer->state.emitted_graphics_pipeline->sx_mrt_blend_opt,
|
||||
pipeline->sx_mrt_blend_opt, sizeof(pipeline->sx_mrt_blend_opt)))
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_COLOR_BLEND_ENABLE;
|
||||
|
||||
if (!cmd_buffer->state.emitted_graphics_pipeline ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->ms.sample_shading_enable != pipeline->ms.sample_shading_enable ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->ms.min_sample_shading != pipeline->ms.min_sample_shading ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->pa_sc_mode_cntl_1 != pipeline->pa_sc_mode_cntl_1 ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->db_render_control != pipeline->db_render_control ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->rast_prim != pipeline->rast_prim)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_RASTERIZATION_SAMPLES;
|
||||
if (cmd_buffer->state.emitted_graphics_pipeline->ms.sample_shading_enable != pipeline->ms.sample_shading_enable ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->ms.min_sample_shading != pipeline->ms.min_sample_shading ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->pa_sc_mode_cntl_1 != pipeline->pa_sc_mode_cntl_1 ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->db_render_control != pipeline->db_render_control ||
|
||||
cmd_buffer->state.emitted_graphics_pipeline->rast_prim != pipeline->rast_prim)
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_RASTERIZATION_SAMPLES;
|
||||
}
|
||||
|
||||
radeon_emit_array(cmd_buffer->cs, pipeline->base.cs.buf, pipeline->base.cs.cdw);
|
||||
|
||||
|
|
@ -5497,6 +5467,39 @@ radv_BeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBegi
|
|||
cmd_buffer->state.last_pa_sc_binner_cntl_0 = -1;
|
||||
cmd_buffer->usage_flags = pBeginInfo->flags;
|
||||
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_PRIMITIVE_TOPOLOGY |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BOUNDS |
|
||||
RADV_CMD_DIRTY_DYNAMIC_PRIMITIVE_RESTART_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_TEST_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_WRITE_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_COMPARE_OP |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_STENCIL_TEST_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_STENCIL_OP |
|
||||
RADV_CMD_DIRTY_DYNAMIC_PATCH_CONTROL_POINTS |
|
||||
RADV_CMD_DIRTY_DYNAMIC_ALPHA_TO_COVERAGE_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_RASTERIZER_DISCARD_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_CLIP_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_CULL_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_FRONT_FACE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS |
|
||||
RADV_CMD_DIRTY_DYNAMIC_POLYGON_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_PROVOKING_VERTEX_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_VIEWPORT |
|
||||
RADV_CMD_DIRTY_DYNAMIC_DEPTH_CLAMP_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_COLOR_WRITE_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LINE_STIPPLE_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_CONSERVATIVE_RAST_MODE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LOGIC_OP |
|
||||
RADV_CMD_DIRTY_DYNAMIC_LOGIC_OP_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_TESS_DOMAIN_ORIGIN |
|
||||
RADV_CMD_DIRTY_DYNAMIC_COLOR_BLEND_ENABLE |
|
||||
RADV_CMD_DIRTY_DYNAMIC_RASTERIZATION_SAMPLES;
|
||||
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_GUARDBAND;
|
||||
|
||||
if (cmd_buffer->device->physical_device->rad_info.gfx_level >= GFX7) {
|
||||
uint32_t pred_value = 0;
|
||||
uint32_t pred_offset;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue