diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index 59807b244f7..0ee8ad30ecc 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -1952,20 +1952,27 @@ tu6_tile_render_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs, { .render_mode = BINNING_PASS, .buffers_location = BUFFERS_IN_GMEM, - .lrz_feedback_zmode_mask = (a6xx_lrz_feedback_mask) (LRZ_FEEDBACK_LATE_Z | LRZ_FEEDBACK_EARLY_LRZ_LATE_Z), + .lrz_feedback_zmode_mask = + phys_dev->info->a6xx.has_lrz_feedback + ? LRZ_FEEDBACK_EARLY_LRZ_LATE_Z + : LRZ_FEEDBACK_NONE }); tu6_emit_render_cntl(cmd, cmd->state.subpass, cs, true); tu6_emit_binning_pass(cmd, cs); - tu6_emit_bin_size(cs, tiling->tile0.width, tiling->tile0.height, - { - .render_mode = RENDERING_PASS, - .force_lrz_write_dis = true, - .buffers_location = BUFFERS_IN_GMEM, - .lrz_feedback_zmode_mask = (a6xx_lrz_feedback_mask) (LRZ_FEEDBACK_LATE_Z | LRZ_FEEDBACK_EARLY_LRZ_LATE_Z), - }); + tu6_emit_bin_size( + cs, tiling->tile0.width, tiling->tile0.height, + { + .render_mode = RENDERING_PASS, + .force_lrz_write_dis = !phys_dev->info->a6xx.has_lrz_feedback, + .buffers_location = BUFFERS_IN_GMEM, + .lrz_feedback_zmode_mask = + phys_dev->info->a6xx.has_lrz_feedback + ? LRZ_FEEDBACK_EARLY_LRZ_LATE_Z + : LRZ_FEEDBACK_NONE, + }); tu_cs_emit_regs(cs, A6XX_VFD_MODE_CNTL(RENDERING_PASS)); @@ -1983,13 +1990,17 @@ tu6_tile_render_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs, tu_cs_emit_pkt7(cs, CP_SKIP_IB2_ENABLE_LOCAL, 1); tu_cs_emit(cs, 0x1); } else { - tu6_emit_bin_size(cs, tiling->tile0.width, tiling->tile0.height, - { - .render_mode = RENDERING_PASS, - .force_lrz_write_dis = true, - .buffers_location = BUFFERS_IN_GMEM, - .lrz_feedback_zmode_mask = (a6xx_lrz_feedback_mask) (LRZ_FEEDBACK_LATE_Z | LRZ_FEEDBACK_EARLY_LRZ_LATE_Z), - }); + tu6_emit_bin_size( + cs, tiling->tile0.width, tiling->tile0.height, + { + .render_mode = RENDERING_PASS, + .force_lrz_write_dis = !phys_dev->info->a6xx.has_lrz_feedback, + .buffers_location = BUFFERS_IN_GMEM, + .lrz_feedback_zmode_mask = + phys_dev->info->a6xx.has_lrz_feedback + ? LRZ_FEEDBACK_EARLY_Z_OR_EARLY_LRZ_LATE_Z + : LRZ_FEEDBACK_NONE, + }); if (tiling->binning_possible) { /* Mark all tiles as visible for tu6_emit_cond_for_load_stores(), since