[Mesa-dev] [PATCH 2/2] radeonsi: pad IBs to a multiple of 8 DWs
Alex Deucher
alexdeucher at gmail.com
Fri Sep 6 07:36:10 PDT 2013
Align IBs to 8 DW to align with the fetch
size of the CP.
Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
CC: "9.2" <mesa-stable at lists.freedesktop.org>
CC: "9.1" <mesa-stable at lists.freedesktop.org>
---
src/gallium/drivers/radeonsi/r600_hw_context.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/gallium/drivers/radeonsi/r600_hw_context.c b/src/gallium/drivers/radeonsi/r600_hw_context.c
index 55daa82..fd86383 100644
--- a/src/gallium/drivers/radeonsi/r600_hw_context.c
+++ b/src/gallium/drivers/radeonsi/r600_hw_context.c
@@ -196,6 +196,7 @@ static void r600_flush_framebuffer(struct r600_context *ctx)
void si_context_flush(struct r600_context *ctx, unsigned flags)
{
struct radeon_winsys_cs *cs = ctx->cs;
+ unsigned i, padding_dw;
bool queries_suspended = false;
#if 0
@@ -239,6 +240,20 @@ void si_context_flush(struct r600_context *ctx, unsigned flags)
}
#endif
+ /* Pad the GFX CS to a multiple of 8 dwords to
+ * align with CP fetch requirements.
+ */
+ padding_dw = 8 - cs->cdw % 8;
+ if (padding_dw < 8) {
+ /* NOTE: type-2 packets are deprecated on CIK+ MEC (compute),
+ * use type-3 instead.
+ * PACKET3(PACKET3_NOP, 0x3FFF) for single DW type 3 NOP on CIK+
+ */
+ for (i = 0; i < padding_dw; i++) {
+ cs->buf[cs->cdw++] = 0x80000000;
+ }
+ }
+
/* Flush the CS. */
ctx->ws->cs_flush(ctx->cs, flags, 0);
--
1.8.3.1
More information about the mesa-dev
mailing list