From e6174e6139add4f67b96a16f77b493a177c8f108 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Thu, 24 Oct 2024 14:28:09 +0200 Subject: [PATCH] panvk/csf: respect depth-clip state Reviewed-by: Boris Brezillon Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index d8a3580b863..b5b1784b30d 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -1056,6 +1056,7 @@ prepare_ds(struct panvk_cmd_buffer *cmdbuf) is_dirty(cmdbuf, DS_STENCIL_WRITE_MASK) || is_dirty(cmdbuf, DS_STENCIL_REFERENCE) || is_dirty(cmdbuf, RS_DEPTH_CLAMP_ENABLE) || + is_dirty(cmdbuf, RS_DEPTH_CLIP_ENABLE) || is_dirty(cmdbuf, RS_DEPTH_BIAS_ENABLE) || is_dirty(cmdbuf, RS_DEPTH_BIAS_FACTORS) || /* fs_required() uses ms.alpha_to_coverage_enable @@ -1110,6 +1111,7 @@ prepare_ds(struct panvk_cmd_buffer *cmdbuf) cfg.front_reference_value = ds->stencil.front.reference; cfg.back_reference_value = ds->stencil.back.reference; + cfg.depth_cull_enable = vk_rasterization_state_depth_clip_enable(rs); if (rs->depth_clamp_enable) cfg.depth_clamp_mode = MALI_DEPTH_CLAMP_MODE_BOUNDS; @@ -1294,8 +1296,10 @@ set_tiler_idvs_flags(struct cs_builder *b, struct panvk_cmd_buffer *cmdbuf, { const struct panvk_shader *vs = cmdbuf->state.gfx.vs.shader; const struct panvk_shader *fs = cmdbuf->state.gfx.fs.shader; - const struct vk_input_assembly_state *ia = - &cmdbuf->vk.dynamic_graphics_state.ia; + const struct vk_dynamic_graphics_state *dyns = + &cmdbuf->vk.dynamic_graphics_state; + const struct vk_input_assembly_state *ia = &dyns->ia; + const struct vk_rasterization_state *rs = &dyns->rs; struct mali_primitive_flags_packed tiler_idvs_flags; bool writes_point_size = @@ -1312,6 +1316,8 @@ set_tiler_idvs_flags(struct cs_builder *b, struct panvk_cmd_buffer *cmdbuf, is_dirty(cmdbuf, CB_ATTACHMENT_COUNT) || is_dirty(cmdbuf, CB_COLOR_WRITE_ENABLES) || is_dirty(cmdbuf, CB_WRITE_MASKS) || + is_dirty(cmdbuf, RS_DEPTH_CLAMP_ENABLE) || + is_dirty(cmdbuf, RS_DEPTH_CLIP_ENABLE) || is_dirty(cmdbuf, IA_PRIMITIVE_RESTART_ENABLE) || is_dirty(cmdbuf, IA_PRIMITIVE_TOPOLOGY) || cmdbuf->state.gfx.fs.spd != get_fs_spd(fs); @@ -1333,6 +1339,9 @@ set_tiler_idvs_flags(struct cs_builder *b, struct panvk_cmd_buffer *cmdbuf, cfg.position_fifo_format = MALI_FIFO_FORMAT_EXTENDED; } + cfg.low_depth_cull = cfg.high_depth_cull = + vk_rasterization_state_depth_clip_enable(rs); + cfg.secondary_shader = vs->info.vs.secondary_enable && fs_required(cmdbuf); cfg.primitive_restart = ia->primitive_restart_enable;