[Intel-xe] [PATCH 3/3] drm/xe/xe2: Update SVG state handling

Balasubramani Vivekanandan balasubramani.vivekanandan at intel.com
Wed Oct 25 13:50:51 UTC 2023


On 17.10.2023 16:18, Matt Roper wrote:
> 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
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>

Reviewed-by: Balasubramani Vivekanandan <balasubramani.vivekanandan at intel.com>

Regards,
Bala

> ---
>  .../gpu/drm/xe/instructions/xe_gfxpipe_commands.h |  1 +
>  drivers/gpu/drm/xe/xe_lrc.c                       | 15 +++++++++++++--
>  2 files changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h b/drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
> index 7be961434719..8e6dd061f2ae 100644
> --- a/drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
> +++ b/drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
> @@ -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)
> diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
> index 4bd6ef9e41fd..d2a2ac10c4ac 100644
> --- a/drivers/gpu/drm/xe/xe_lrc.c
> +++ b/drivers/gpu/drm/xe/xe_lrc.c
> @@ -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;
> @@ -1254,6 +1254,17 @@ void xe_lrc_emit_hwe_state_instructions(struct xe_exec_queue *q, struct xe_bb *b
>  		xe_gt_assert(gt, (instr & XE_INSTR_CMD_TYPE) == XE_INSTR_GFXPIPE);
>  		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);
> -- 
> 2.41.0
> 


More information about the Intel-xe mailing list