[Mesa-dev] [PATCH 12/23] i965/disasm: Actually disassemble Gen7+ URB opcodes.

Kristian Høgsberg hoegsberg at gmail.com
Mon Jun 30 10:20:13 PDT 2014


On Sat, Jun 28, 2014 at 09:33:51PM -0700, Kenneth Graunke wrote:
> I never bothered implementing the disassembler for Gen7+ URB opcodes, so
> we were just disassembling them as Ironlake/Sandybridge ones.  This
> looked pretty bad when running Paul's GS EndPrimitive tests, as the
> "write OWord" message was decoded at ff_sync, which doesn't exist.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_disasm.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c b/src/mesa/drivers/dri/i965/brw_disasm.c
> index 14cb687..4e75cc7 100644
> --- a/src/mesa/drivers/dri/i965/brw_disasm.c
> +++ b/src/mesa/drivers/dri/i965/brw_disasm.c
> @@ -478,11 +478,24 @@ static const char *const math_precision[2] = {
>     [1] = "partial_precision"
>  };
>  
> -static const char *const urb_opcode[2] = {
> +static const char *const gen5_urb_opcode[] = {
>     [0] = "urb_write",
>     [1] = "ff_sync",
>  };
>  
> +static const char *const gen7_urb_opcode[] = {
> +   [0] = "write HWord",
> +   [1] = "write OWord",
> +   [2] = "read HWord",
> +   [3] = "read OWord",
> +   [4] = "atomic mov",  /* Gen7+ */
> +   [5] = "atomic inc",  /* Gen7+ */
> +   [6] = "atomic add",  /* Gen8+ */
> +   [7] = "SIMD8 write", /* Gen8+ */
> +   [8] = "SIMD8 read",  /* Gen8+ */
> +   /* [9-15] - reserved */
> +};

Do we have defines for these opcodes?  They stand out a bit now that
all the rest are using opcode names in the array initializer.

Either way, not worth blocking this disasm improvement on,

Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>


>  static const char *const urb_swizzle[4] = {
>     [BRW_URB_SWIZZLE_NONE]       = "",
>     [BRW_URB_SWIZZLE_INTERLEAVE] = "interleave",
> @@ -1361,8 +1374,11 @@ brw_disassemble_inst(FILE *file, struct brw_context *brw, brw_inst *inst,
>           format(file, " %d", brw_inst_urb_global_offset(brw, inst));
>  
>           space = 1;
> -         if (brw->gen >= 5) {
> -            err |= control(file, "urb opcode", urb_opcode,
> +         if (brw->gen >= 7) {
> +            err |= control(file, "urb opcode", gen7_urb_opcode,
> +                           brw_inst_urb_opcode(brw, inst), &space);
> +         } else if (brw->gen >= 5) {
> +            err |= control(file, "urb opcode", gen5_urb_opcode,
>                             brw_inst_urb_opcode(brw, inst), &space);
>           }
>           err |= control(file, "urb swizzle", urb_swizzle,
> -- 
> 2.0.0
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list