[Mesa-dev] [PATCH] intel: Fix decoding for partial STATE_BASE_ADDRESS updates.

Lionel Landwerlin lionel.g.landwerlin at intel.com
Mon Oct 22 09:57:10 UTC 2018


Could you maybe update src/intel/tools/aubinator_viewer_decoder.cpp 
(function handle_state_base_address) ?

Either way :

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 22/10/2018 06:18, Kenneth Graunke wrote:
> STATE_BASE_ADDRESS only modifies various bases if the "modify" bit is
> set.  Otherwise, we want to keep the existing base address.
>
> Iris uses this for updating Surface State Base Address while leaving the
> others as-is.
> ---
>   src/intel/common/gen_batch_decoder.c | 24 +++++++++++++++++++++---
>   1 file changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/src/intel/common/gen_batch_decoder.c b/src/intel/common/gen_batch_decoder.c
> index 1a5c8c37968..827f3dbdd2f 100644
> --- a/src/intel/common/gen_batch_decoder.c
> +++ b/src/intel/common/gen_batch_decoder.c
> @@ -200,15 +200,33 @@ handle_state_base_address(struct gen_batch_decode_ctx *ctx, const uint32_t *p)
>      struct gen_field_iterator iter;
>      gen_field_iterator_init(&iter, inst, p, 0, false);
>   
> +   uint64_t surface_base = 0, dynamic_base = 0, instruction_base = 0;
> +   bool surface_modify = 0, dynamic_modify = 0, instruction_modify = 0;
> +
>      while (gen_field_iterator_next(&iter)) {
>         if (strcmp(iter.name, "Surface State Base Address") == 0) {
> -         ctx->surface_base = iter.raw_value;
> +         surface_base = iter.raw_value;
>         } else if (strcmp(iter.name, "Dynamic State Base Address") == 0) {
> -         ctx->dynamic_base = iter.raw_value;
> +         dynamic_base = iter.raw_value;
>         } else if (strcmp(iter.name, "Instruction Base Address") == 0) {
> -         ctx->instruction_base = iter.raw_value;
> +         instruction_base = iter.raw_value;
> +      } else if (strcmp(iter.name, "Surface State Base Address Modify Enable") == 0) {
> +         surface_modify = iter.raw_value;
> +      } else if (strcmp(iter.name, "Dynamic State Base Address Modify Enable") == 0) {
> +         dynamic_modify = iter.raw_value;
> +      } else if (strcmp(iter.name, "Insntruction Base Address Modify Enable") == 0) {
> +         instruction_modify = iter.raw_value;
>         }
>      }
> +
> +   if (dynamic_modify)
> +      ctx->dynamic_base = dynamic_base;
> +
> +   if (surface_modify)
> +      ctx->surface_base = surface_base;
> +
> +   if (instruction_modify)
> +      ctx->instruction_base = instruction_base;
>   }
>   
>   static void




More information about the mesa-dev mailing list