diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index d1e5be7c19a..c04e02896f8 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -1003,7 +1003,8 @@ tu6_emit_tile_select(struct tu_cmd_buffer *cmd, const struct tu_tiling_config *tiling = cmd->state.tiling; tu_cs_emit_pkt7(cs, CP_SET_MARKER, 1); - tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RENDER_START)); + tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RENDER_START) | + A6XX_CP_SET_MARKER_0_USES_GMEM); const uint32_t x1 = tiling->tile0.width * tx; const uint32_t y1 = tiling->tile0.height * ty; @@ -1197,7 +1198,8 @@ tu6_emit_tile_store(struct tu_cmd_buffer *cmd, struct tu_cs *cs) tu_cs_set_writeable(cs, true); tu_cs_emit_pkt7(cs, CP_SET_MARKER, 1); - tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RESOLVE)); + tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RESOLVE) | + A6XX_CP_SET_MARKER_0_USES_GMEM); tu6_emit_blit_scissor(cmd, cs, true); @@ -2100,7 +2102,8 @@ tu6_render_tile(struct tu_cmd_buffer *cmd, struct tu_cs *cs, if (use_hw_binning(cmd)) { tu_cs_emit_pkt7(cs, CP_SET_MARKER, 1); - tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_END_OF_DRAWS)); + tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_END_OF_DRAWS) | + A6XX_CP_SET_MARKER_0_USES_GMEM); } /* Predicate is changed in draw_cs so we have to re-emit it */ @@ -2115,6 +2118,11 @@ tu6_render_tile(struct tu_cmd_buffer *cmd, struct tu_cs *cs, tu_clone_trace_range(cmd, cs, cmd->trace_renderpass_start, cmd->trace_renderpass_end); + tu_cs_emit_wfi(cs); + + tu_cs_emit_pkt7(cs, CP_SET_MARKER, 1); + tu_cs_emit(cs, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RENDER_END)); + tu_cs_sanity_check(cs); trace_end_draw_ib_gmem(&cmd->trace, &cmd->cs); diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_gmem.cc b/src/gallium/drivers/freedreno/a6xx/fd6_gmem.cc index 3c8158e2dd5..a1e76be8acf 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_gmem.cc +++ b/src/gallium/drivers/freedreno/a6xx/fd6_gmem.cc @@ -1192,7 +1192,8 @@ fd6_emit_tile_prep(struct fd_batch *batch, const struct fd_tile *tile) emit_marker6(ring, 7); OUT_PKT7(ring, CP_SET_MARKER, 1); - OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RENDER_START)); + OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RENDER_START) | + A6XX_CP_SET_MARKER_0_USES_GMEM); emit_marker6(ring, 7); uint32_t x1 = tile->xoff; @@ -1774,7 +1775,8 @@ fd6_emit_tile_gmem2mem(struct fd_batch *batch, const struct fd_tile *tile) if (use_hw_binning(batch)) { OUT_PKT7(ring, CP_SET_MARKER, 1); - OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_END_OF_DRAWS)); + OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_END_OF_DRAWS) | + A6XX_CP_SET_MARKER_0_USES_GMEM); } OUT_PKT7(ring, CP_SET_DRAW_STATE, 3); @@ -1789,7 +1791,8 @@ fd6_emit_tile_gmem2mem(struct fd_batch *batch, const struct fd_tile *tile) emit_marker6(ring, 7); OUT_PKT7(ring, CP_SET_MARKER, 1); - OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RESOLVE)); + OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RESOLVE) | + A6XX_CP_SET_MARKER_0_USES_GMEM); emit_marker6(ring, 7); if (batch->tile_store) { @@ -1797,6 +1800,9 @@ fd6_emit_tile_gmem2mem(struct fd_batch *batch, const struct fd_tile *tile) emit_conditional_ib(batch, tile, batch->tile_store); trace_end_tile_stores(&batch->trace, batch->gmem); } + + OUT_PKT7(ring, CP_SET_MARKER, 1); + OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_BIN_RENDER_END)); } template