<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:11pt;">
<div> </div>
<a name="_MailEndCompose"></a>
<div> </div>
<div>-----Original Message-----<br>

From: mesa-dev [<a href="mailto:mesa-dev-bounces@lists.freedesktop.org">mailto:mesa-dev-bounces@lists.freedesktop.org</a>] On Behalf Of Lionel Landwerlin<br>

Sent: Friday, September 09, 2016 3:26 AM<br>

To: mesa-dev@lists.freedesktop.org<br>

Cc: Landwerlin, Lionel G <lionel.g.landwerlin@intel.com><br>

Subject: [Mesa-dev] [PATCH] aubinator: add a custom handler for immediate register load</div>
<div> </div>
<div>Transforming this :</div>
<div> </div>
<div>0x00c77084:  0x11000001:  MI_LOAD_REGISTER_IMM</div>
<div>0x00c77088:  0x0000b020 : Dword 1</div>
<div>    Register Offset: 0x0000b020</div>
<div>    0x00c7708c:  0x00880038 : Dword 2</div>
<div>    Data DWord: 8912952</div>
<div> </div>
<div>Into this:</div>
<div> </div>
<div>0x00c77084:  0x11000001:  MI_LOAD_REGISTER_IMM</div>
<div>0x00c77088:  0x0000b020 : Dword 1</div>
<div>    Register Offset: 0x0000b020</div>
<div>    0x00c7708c:  0x00880038 : Dword 2</div>
<div>    Data DWord: 8912952</div>
<div>    SLM Enable: 0</div>
<div>    URB Allocation: 28</div>
<div>    URB Low Bandwidth: 0</div>
<div>    RO Allocation: 32</div>
<div>    RO Low Bandwidth: 0</div>
<div>    DC Allocation: 4</div>
<div>    DC Low Bandwidth: 0</div>
<div> </div>
<div>Signed-off-by: Lionel Landwerlin <<a href="mailto:lionel.g.landwerlin@intel.com">lionel.g.landwerlin@intel.com</a>></div>
<div>---</div>
<div> src/intel/tools/aubinator.c | 14 +++++++++++++-</div>
<div> src/intel/tools/decoder.c   | 30 ++++++++++++++++++++++++++++--</div>
<div> src/intel/tools/decoder.h   |  4 ++++</div>
<div> 3 files changed, 45 insertions(+), 3 deletions(-)</div>
<div> </div>
<div>diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c index fe1f369..74229a9 100644</div>
<div>--- a/src/intel/tools/aubinator.c</div>
<div>+++ b/src/intel/tools/aubinator.c</div>
<div>@@ -621,6 +621,15 @@ handle_3dstate_scissor_state_pointers(struct gen_spec *spec, uint32_t *p)</div>
<div>    decode_structure(spec, scissor_rect, gtt + start);  }</div>
<div> </div>
<div>+static void</div>
<div>+handle_load_register_imm(struct gen_spec *spec, uint32_t *p) {</div>
<div>+   struct gen_group *reg = gen_spec_find_register(spec, p[1]);</div>
<div>+</div>
<div>+   if (reg != NULL)</div>
<div>+      decode_structure(spec, reg, &p[2]); }</div>
<div>+</div>
<div> #define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])</div>
<div> </div>
<div> #define STATE_BASE_ADDRESS                  0x61010000</div>
<div>@@ -659,6 +668,8 @@ handle_3dstate_scissor_state_pointers(struct gen_spec *spec, uint32_t *p)</div>
<div> #define _3DSTATE_CC_STATE_POINTERS          0x780e0000</div>
<div> #define _3DSTATE_SCISSOR_STATE_POINTERS     0x780f0000</div>
<div> </div>
<div>+#define _MI_LOAD_REGISTER_IMM               0x11000000</div>
<div>+</div>
<div> struct custom_handler {</div>
<div>    uint32_t opcode;</div>
<div>    void (*handle)(struct gen_spec *spec, uint32_t *p); @@ -692,7 +703,8 @@ struct custom_handler {</div>
<div>    { _3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP, handle_3dstate_viewport_state_pointers_sf_clip },</div>
<div>    { _3DSTATE_BLEND_STATE_POINTERS, handle_3dstate_blend_state_pointers },</div>
<div>    { _3DSTATE_CC_STATE_POINTERS, handle_3dstate_cc_state_pointers },</div>
<div>-   { _3DSTATE_SCISSOR_STATE_POINTERS, handle_3dstate_scissor_state_pointers }</div>
<div>+   { _3DSTATE_SCISSOR_STATE_POINTERS, handle_3dstate_scissor_state_pointers },</div>
<div>+   { _MI_LOAD_REGISTER_IMM, handle_load_register_imm }</div>
<div> };</div>
<div> </div>
<div> static void</div>
<div>diff --git a/src/intel/tools/decoder.c b/src/intel/tools/decoder.c index f080437..d7e6a3f 100644</div>
<div>--- a/src/intel/tools/decoder.c</div>
<div>+++ b/src/intel/tools/decoder.c</div>
<div>@@ -88,6 +88,16 @@ gen_spec_find_struct(struct gen_spec *spec, const char *name)</div>
<div>    return NULL;</div>
<div> }</div>
<div> </div>
<div>+struct gen_group *</div>
<div>+gen_spec_find_register(struct gen_spec *spec, uint32_t offset) {</div>
<div>+   for (int i = 0; i < spec->nregisters; i++)</div>
<div>+      if (spec->registers[i]->register_offset == offset)</div>
<div>+         return spec->registers[i];</div>
<div>+</div>
<div>+   return NULL;</div>
<div>+}</div>
<div>+</div>
<div> uint32_t</div>
<div> gen_spec_get_gen(struct gen_spec *spec)  { @@ -168,6 +178,20 @@ get_group_offset_count(struct parser_context *ctx, const char *name,</div>
<div>    return;</div>
<div> }</div>
<div> </div>
<div>+static void</div>
<div>+get_register_offset(struct parser_context *ctx, const char *name,</div>
<div>+                    const char **atts, uint32_t *offset) {</div>
<div>+   char *p;</div>
<div>+   int i;</div>
<div>+</div>
<div>+   for (i = 0; atts[i]; i += 2) {</div>
<div>+      if (strcmp(atts[i], "num") == 0)</div>
<div>+         *offset = strtoul(atts[i + 1], &p, 0);</div>
<div>+   }</div>
<div>+   return;</div>
<div>+}</div>
<div>+</div>
<div> </div>
<div><font color="#7030A0">[SG]:  "ctx" , "name" arguments seems unnecessary when you are not using it. I would get rid of these.</font></div>
<div><font color="#7030A0">Except for this, patch works for me. </font></div>
<div> </div>
<div> </div>
<div> static inline uint64_t</div>
<div> mask(int start, int end)</div>
<div> {</div>
<div>@@ -288,9 +312,11 @@ start_element(void *data, const char *element_name, const char **atts)</div>
<div> </div>
<div>       ctx->spec->gen = MAKE_GEN(major, minor);</div>
<div>    } else if (strcmp(element_name, "instruction") == 0 ||</div>
<div>-              strcmp(element_name, "struct") == 0 ||</div>
<div>-              strcmp(element_name, "register") == 0) {</div>
<div>+              strcmp(element_name, "struct") == 0) {</div>
<div>+      ctx->group = create_group(ctx, name, atts);</div>
<div>+   } else if (strcmp(element_name, "register") == 0) {</div>
<div>       ctx->group = create_group(ctx, name, atts);</div>
<div>+      get_register_offset(ctx, name, atts, </div>
<div>+ &ctx->group->register_offset);</div>
<div> </div>
<div><font color="#7030A0">[SG]: same as above comment... "ctx", "name" arguments unnecessary</font></div>
<div><font color="#7030A0">If you fix the above comments, patch looks okay to me.</font></div>
<div> </div>
<div>    } else if (strcmp(element_name, "group") == 0) {</div>
<div>       get_group_offset_count(ctx, name, atts, &ctx->group->group_offset,</div>
<div>                              &ctx->group->group_count); diff --git a/src/intel/tools/decoder.h b/src/intel/tools/decoder.h index b46e451..9b74cb4 100644</div>
<div>--- a/src/intel/tools/decoder.h</div>
<div>+++ b/src/intel/tools/decoder.h</div>
<div>@@ -39,6 +39,7 @@ struct gen_group *gen_spec_find_struct(struct gen_spec *spec, const char *name);  struct gen_spec *gen_spec_load(const char *filename);  uint32_t gen_spec_get_gen(struct gen_spec *spec);  struct gen_group *gen_spec_find_instruction(struct
gen_spec *spec, const uint32_t *p);</div>
<div>+struct gen_group *gen_spec_find_register(struct gen_spec *spec, </div>
<div>+uint32_t offset);</div>
<div> int gen_group_get_length(struct gen_group *group, const uint32_t *p);  const char *gen_group_get_name(struct gen_group *group);  uint32_t gen_group_get_opcode(struct gen_group *group); @@ -59,6 +60,9 @@ struct gen_group {</div>
<div> </div>
<div>    uint32_t opcode_mask;</div>
<div>    uint32_t opcode;</div>
<div>+</div>
<div>+   /* Register specific */</div>
<div>+   uint32_t register_offset;</div>
<div> };</div>
<div> </div>
<div> struct gen_type {</div>
<div>--</div>
<div>2.9.3</div>
<div> </div>
<div>_______________________________________________</div>
<div>mesa-dev mailing list</div>
<div><a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a></div>
<div><a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a></div>
<div> </div>
</span></font>
</body>
</html>