diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 8275ae990f7..f2c212c6d5e 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -741,8 +741,8 @@ panfrost_emit_viewport(struct panfrost_batch *batch) maxx--; maxy--; - batch->minimum_z = rast->depth_clip_near ? minz : -INFINITY; - batch->maximum_z = rast->depth_clip_far ? maxz : +INFINITY; + batch->minimum_z = minz; + batch->maximum_z = maxz; #if PAN_ARCH <= 7 struct panfrost_ptr T = pan_pool_alloc_desc(&batch->pool.base, VIEWPORT); @@ -802,6 +802,9 @@ panfrost_emit_depth_stencil(struct panfrost_batch *batch) cfg.depth_units = panfrost_z_depth_offset(ctx, rast->base.offset_units); cfg.depth_factor = rast->base.offset_scale; cfg.depth_bias_clamp = rast->base.offset_clamp; + + assert(rast->base.depth_clip_near == rast->base.depth_clip_far); + cfg.depth_cull_enable = rast->base.depth_clip_near; } pan_merge(dynamic, zsa->desc, DEPTH_STENCIL); @@ -3512,7 +3515,9 @@ panfrost_create_depth_stencil_state( pan_pipe_to_stencil(&front, &so->stencil_front); pan_pipe_to_stencil(&back, &so->stencil_back); #else - pan_pack(&so->desc, DEPTH_STENCIL, cfg) { + /* Pack with nodefaults so only explicitly set fields affect pan_merge() when + * emitting depth stencil descriptor */ + pan_pack_nodefaults(&so->desc, DEPTH_STENCIL, cfg) { cfg.front_compare_function = (enum mali_func)front.func; cfg.front_stencil_fail = pan_pipe_to_stencil_op(front.fail_op); cfg.front_depth_fail = pan_pipe_to_stencil_op(front.zfail_op); diff --git a/src/gallium/drivers/panfrost/pan_csf.c b/src/gallium/drivers/panfrost/pan_csf.c index 7e4bff9e594..f196880a31c 100644 --- a/src/gallium/drivers/panfrost/pan_csf.c +++ b/src/gallium/drivers/panfrost/pan_csf.c @@ -784,6 +784,8 @@ csf_emit_draw_state(struct panfrost_batch *batch, if (info->index_size) cs_move64_to(b, cs_reg64(b, 54), batch->indices); + struct pipe_rasterizer_state *rast = &ctx->rasterizer->base; + uint32_t primitive_flags = 0; pan_pack(&primitive_flags, PRIMITIVE_FLAGS, cfg) { if (panfrost_writes_point_size(ctx)) @@ -791,6 +793,9 @@ csf_emit_draw_state(struct panfrost_batch *batch, cfg.allow_rotating_primitives = allow_rotating_primitives(fs, info); + cfg.low_depth_cull = rast->depth_clip_near; + cfg.high_depth_cull = rast->depth_clip_far; + /* Non-fixed restart indices should have been lowered */ assert(!cfg.primitive_restart || panfrost_is_implicit_prim_restart(info)); cfg.primitive_restart = info->primitive_restart; @@ -802,8 +807,6 @@ csf_emit_draw_state(struct panfrost_batch *batch, cs_move32_to(b, cs_reg32(b, 56), primitive_flags); - struct pipe_rasterizer_state *rast = &ctx->rasterizer->base; - uint32_t dcd_flags0 = 0, dcd_flags1 = 0; pan_pack(&dcd_flags0, DCD_FLAGS_0, cfg) { enum mesa_prim reduced_mode = u_reduced_prim(info->mode); @@ -918,7 +921,9 @@ csf_emit_draw_state(struct panfrost_batch *batch, cs_move64_to(b, cs_reg64(b, 60), primsize); uint32_t flags_override; - pan_pack(&flags_override, PRIMITIVE_FLAGS, cfg) { + /* Pack with nodefaults so only explicitly set override fields affect the + * previously set register values */ + pan_pack_nodefaults(&flags_override, PRIMITIVE_FLAGS, cfg) { cfg.draw_mode = pan_draw_mode(info->mode); cfg.index_type = panfrost_translate_index_size(info->index_size); cfg.secondary_shader = secondary_shader; diff --git a/src/gallium/drivers/panfrost/pan_jm.c b/src/gallium/drivers/panfrost/pan_jm.c index 2b6fad71932..af75da60d99 100644 --- a/src/gallium/drivers/panfrost/pan_jm.c +++ b/src/gallium/drivers/panfrost/pan_jm.c @@ -694,6 +694,9 @@ jm_emit_primitive(struct panfrost_batch *batch, assert(!cfg.primitive_restart || panfrost_is_implicit_prim_restart(info)); #endif + cfg.low_depth_cull = rast->depth_clip_near; + cfg.high_depth_cull = rast->depth_clip_far; + cfg.index_count = draw->count; cfg.index_type = panfrost_translate_index_size(info->index_size); diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c index cedd1f15b99..7b329b8852e 100644 --- a/src/gallium/drivers/panfrost/pan_screen.c +++ b/src/gallium/drivers/panfrost/pan_screen.c @@ -115,7 +115,6 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param) case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD: case PIPE_CAP_VERTEX_COLOR_UNCLAMPED: case PIPE_CAP_DEPTH_CLIP_DISABLE: - case PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE: case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES: case PIPE_CAP_FRONTEND_NOOP: case PIPE_CAP_SAMPLE_SHADING: @@ -126,6 +125,10 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param) case PIPE_CAP_HAS_CONST_BW: return 1; + /* Removed in v9 (Valhall) */ + case PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE: + return dev->arch < 9; + case PIPE_CAP_MAX_RENDER_TARGETS: case PIPE_CAP_FBFETCH: case PIPE_CAP_FBFETCH_COHERENT: diff --git a/src/panfrost/ci/panfrost-g52-fails.txt b/src/panfrost/ci/panfrost-g52-fails.txt index 0f028c890c7..dd234511f30 100644 --- a/src/panfrost/ci/panfrost-g52-fails.txt +++ b/src/panfrost/ci/panfrost-g52-fails.txt @@ -14,7 +14,6 @@ shaders@point-vertex-id gl_vertexid,Fail shaders@point-vertex-id gl_vertexid gl_instanceid divisor,Fail shaders@point-vertex-id gl_vertexid gl_instanceid,Fail spec@arb_base_instance@arb_base_instance-drawarrays,Fail -spec@arb_depth_clamp@depth-clamp-range,Fail spec@arb_direct_state_access@gettextureimage-formats,Fail spec@arb_direct_state_access@gettextureimage-formats init-by-rendering,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,Fail diff --git a/src/panfrost/ci/panfrost-g57-fails.txt b/src/panfrost/ci/panfrost-g57-fails.txt index 3b5dd1fbec4..0cea7849063 100644 --- a/src/panfrost/ci/panfrost-g57-fails.txt +++ b/src/panfrost/ci/panfrost-g57-fails.txt @@ -24,7 +24,6 @@ shaders@point-vertex-id gl_vertexid,Fail shaders@point-vertex-id gl_vertexid gl_instanceid divisor,Fail shaders@point-vertex-id gl_vertexid gl_instanceid,Fail spec@arb_base_instance@arb_base_instance-drawarrays,Fail -spec@arb_depth_clamp@depth-clamp-range,Fail spec@arb_direct_state_access@gettextureimage-formats,Fail spec@arb_direct_state_access@gettextureimage-formats init-by-rendering,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,Fail