]> Git Repo - linux.git/commitdiff
drm/xe/xe2: Update SVG state handling
authorMatt Roper <[email protected]>
Wed, 25 Oct 2023 15:17:36 +0000 (08:17 -0700)
committerRodrigo Vivi <[email protected]>
Thu, 21 Dec 2023 16:43:22 +0000 (11:43 -0500)
As with DG2/MTL, Xe2 also fails to emit instruction headers for SVG
state instructions if no explicit state has been set.  The SVG part of
the LRC is nearly identical to DG2/MTL; the only change is that
3DSTATE_DRAWING_RECTANGLE has been replaced by
3DSTATE_DRAWING_RECTANGLE_FAST, so we can just re-use the same state
table and handle that single instruction when we encounter it.

Bspec: 65182
Reviewed-by: Balasubramani Vivekanandan <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Matt Roper <[email protected]>
Signed-off-by: Rodrigo Vivi <[email protected]>
drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
drivers/gpu/drm/xe/xe_lrc.c

index 7be961434719530c50b43416df93ef9a699946a7..8e6dd061f2aea29040ce866dd29725ee8d23b05c 100644 (file)
@@ -52,6 +52,7 @@
 
 #define PIPELINE_SELECT                                GFXPIPE_SINGLE_DW_CMD(0x1, 0x4)
 
+#define CMD_3DSTATE_DRAWING_RECTANGLE_FAST     GFXPIPE_3D_CMD(0x0, 0x0)
 #define CMD_3DSTATE_CLEAR_PARAMS               GFXPIPE_3D_CMD(0x0, 0x4)
 #define CMD_3DSTATE_DEPTH_BUFFER               GFXPIPE_3D_CMD(0x0, 0x5)
 #define CMD_3DSTATE_STENCIL_BUFFER             GFXPIPE_3D_CMD(0x0, 0x6)
index 944bb2f646608d2ba5bebb215debe09d8ee9cf04..f8754f06159991886393827dae2e21ff04d97eb4 100644 (file)
@@ -1015,6 +1015,7 @@ static int dump_gfxpipe_command(struct drm_printer *p,
 
        MATCH(PIPELINE_SELECT);
 
+       MATCH3D(3DSTATE_DRAWING_RECTANGLE_FAST);
        MATCH3D(3DSTATE_CLEAR_PARAMS);
        MATCH3D(3DSTATE_DEPTH_BUFFER);
        MATCH3D(3DSTATE_STENCIL_BUFFER);
@@ -1235,8 +1236,7 @@ void xe_lrc_emit_hwe_state_instructions(struct xe_exec_queue *q, struct xe_bb *b
 
        switch (GRAPHICS_VERx100(xe)) {
        case 1255:
-       case 1270:
-       case 1271:
+       case 1270 ... 2004:
                state_table = xe_hpg_svg_state;
                state_table_size = ARRAY_SIZE(xe_hpg_svg_state);
                break;
@@ -1255,6 +1255,17 @@ void xe_lrc_emit_hwe_state_instructions(struct xe_exec_queue *q, struct xe_bb *b
                xe_gt_assert(gt, num_dw != 0);
                xe_gt_assert(gt, is_single_dw ^ (num_dw > 1));
 
+               /*
+                * Xe2's SVG context is the same as the one on DG2 / MTL
+                * except that 3DSTATE_DRAWING_RECTANGLE (non-pipelined) has
+                * been replaced by 3DSTATE_DRAWING_RECTANGLE_FAST (pipelined).
+                * Just make the replacement here rather than defining a
+                * whole separate table for the single trivial change.
+                */
+               if (GRAPHICS_VER(xe) >= 20 &&
+                   instr == CMD_3DSTATE_DRAWING_RECTANGLE)
+                       instr = CMD_3DSTATE_DRAWING_RECTANGLE_FAST;
+
                bb->cs[bb->len] = instr;
                if (!is_single_dw)
                        bb->cs[bb->len] |= (num_dw - 2);
This page took 0.066985 seconds and 4 git commands to generate.