[Mesa-dev] [PATCH 1/4] tgsi: add option to dump floats as hex values

Marek Olšák maraeo at gmail.com
Tue Oct 13 03:39:12 PDT 2015


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Tue, Oct 13, 2015 at 6:40 AM, Dave Airlie <airlied at gmail.com> wrote:
> This adds support to the parser to accept hex values as floats,
> and then adds support to the dumper to allow the user to select
> to dump float as 32-bit hex numbers.
>
> This is required to get accurate values for virgl use of TGSI.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/gallium/auxiliary/tgsi/tgsi_dump.c | 19 ++++++++++++++++++-
>  src/gallium/auxiliary/tgsi/tgsi_dump.h |  2 ++
>  src/gallium/auxiliary/tgsi/tgsi_text.c | 11 ++++++++++-
>  3 files changed, 30 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c
> index 8ceb5b4..33f6a56 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
> @@ -29,6 +29,7 @@
>  #include "util/u_string.h"
>  #include "util/u_math.h"
>  #include "util/u_memory.h"
> +#include "util/u_math.h"
>  #include "tgsi_dump.h"
>  #include "tgsi_info.h"
>  #include "tgsi_iterate.h"
> @@ -43,6 +44,8 @@ struct dump_ctx
>  {
>     struct tgsi_iterate_context iter;
>
> +   boolean dump_float_as_hex;
> +
>     uint instno;
>     uint immno;
>     int indent;
> @@ -88,6 +91,7 @@ dump_enum(
>  #define SID(I)          ctx->dump_printf( ctx, "%d", I )
>  #define FLT(F)          ctx->dump_printf( ctx, "%10.4f", F )
>  #define DBL(D)          ctx->dump_printf( ctx, "%10.8f", D )
> +#define HFLT(F)         ctx->dump_printf( ctx, "0x%08x", fui((F)) )
>  #define ENM(E,ENUMS)    dump_enum( ctx, E, ENUMS, sizeof( ENUMS ) / sizeof( *ENUMS ) )
>
>  const char *
> @@ -251,7 +255,10 @@ dump_imm_data(struct tgsi_iterate_context *iter,
>           break;
>        }
>        case TGSI_IMM_FLOAT32:
> -         FLT( data[i].Float );
> +         if (ctx->dump_float_as_hex)
> +            HFLT( data[i].Float );
> +         else
> +            FLT( data[i].Float );
>           break;
>        case TGSI_IMM_UINT32:
>           UID(data[i].Uint);
> @@ -681,6 +688,11 @@ tgsi_dump_to_file(const struct tgsi_token *tokens, uint flags, FILE *file)
>     ctx.indentation = 0;
>     ctx.file = file;
>
> +   if (flags & TGSI_DUMP_FLOAT_AS_HEX)
> +      ctx.dump_float_as_hex = TRUE;
> +   else
> +      ctx.dump_float_as_hex = FALSE;
> +
>     tgsi_iterate_shader( tokens, &ctx.iter );
>  }
>
> @@ -749,6 +761,11 @@ tgsi_dump_str(
>     ctx.ptr = str;
>     ctx.left = (int)size;
>
> +   if (flags & TGSI_DUMP_FLOAT_AS_HEX)
> +      ctx.base.dump_float_as_hex = TRUE;
> +   else
> +      ctx.base.dump_float_as_hex = FALSE;
> +
>     tgsi_iterate_shader( tokens, &ctx.base.iter );
>  }
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.h b/src/gallium/auxiliary/tgsi/tgsi_dump.h
> index 7c8f92e..6666b98 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_dump.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.h
> @@ -38,6 +38,8 @@
>  extern "C" {
>  #endif
>
> +#define TGSI_DUMP_FLOAT_AS_HEX (1 << 0)
> +
>  void
>  tgsi_dump_str(
>     const struct tgsi_token *tokens,
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
> index 3e3ed5b..4a82c9b 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_text.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
> @@ -195,8 +195,15 @@ static boolean parse_float( const char **pcur, float *val )
>     boolean integral_part = FALSE;
>     boolean fractional_part = FALSE;
>
> -   *val = (float) atof( cur );
> +   if (*cur == '0' && *(cur + 1) == 'x') {
> +      union fi fi;
> +      fi.ui = strtoul(cur, NULL, 16);
> +      *val = fi.f;
> +      cur += 10;
> +      goto out;
> +   }
>
> +   *val = (float) atof( cur );
>     if (*cur == '-' || *cur == '+')
>        cur++;
>     if (is_digit( cur )) {
> @@ -228,6 +235,8 @@ static boolean parse_float( const char **pcur, float *val )
>        else
>           return FALSE;
>     }
> +
> +out:
>     *pcur = cur;
>     return TRUE;
>  }
> --
> 2.4.3
>
> _______________________________________________
> 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