[Mesa-dev] [PATCH 1/5] tgsi: add source/destination type from opcodes.

Jose Fonseca jfonseca at vmware.com
Mon Feb 6 11:34:56 PST 2012


Dave,

Please define a new enum tgsi_info.h for this as UTIL_FORMAT_XXX is not suited (there is no value for doubles), for example

 enum tgsi_opcode_type {
     TGSI_TYPE_UNDETERMINED = -1, // e.g. TGSI_OPCODE_MOV
     TGSI_TYPE_VOID = 0 
     TGSI_TYPE_FLOAT,
     TGSI_TYPE_INT,
     TGSI_TYPE_UINT,
     TGSI_TYPE_DOUBLE,
 };


Jose

----- Original Message -----
> From: Dave Airlie <airlied at redhat.com>
> 
> These two functions produce the src/dst types for an opcode.
> 
> MOV is special since it can be used to mov float->float and int->int,
> so just return VOID.
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/gallium/auxiliary/tgsi/tgsi_info.c |   97
>  ++++++++++++++++++++++++++++++++
>  src/gallium/auxiliary/tgsi/tgsi_info.h |    6 ++
>  2 files changed, 103 insertions(+), 0 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c
> b/src/gallium/auxiliary/tgsi/tgsi_info.c
> index 2407448..4659fb3 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_info.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_info.c
> @@ -243,3 +243,100 @@ tgsi_get_processor_name( uint processor )
>        return "unknown shader type!";
>     }
>  }
> +
> +/*
> + * infer the source type of a TGSI opcode.
> + * MOV is special so return VOID
> + */
> +enum util_format_type
> +tgsi_opcode_infer_src_type( uint opcode )
> +{
> +   switch (opcode) {
> +   case TGSI_OPCODE_MOV:
> +      return UTIL_FORMAT_TYPE_VOID;
> +   case TGSI_OPCODE_AND:
> +   case TGSI_OPCODE_OR:
> +   case TGSI_OPCODE_XOR:
> +   case TGSI_OPCODE_SAD:
> +   case TGSI_OPCODE_U2F:
> +   case TGSI_OPCODE_UADD:
> +   case TGSI_OPCODE_UDIV:
> +   case TGSI_OPCODE_UMOD:
> +   case TGSI_OPCODE_UMAD:
> +   case TGSI_OPCODE_UMUL:
> +   case TGSI_OPCODE_UMAX:
> +   case TGSI_OPCODE_UMIN:
> +   case TGSI_OPCODE_USEQ:
> +   case TGSI_OPCODE_USGE:
> +   case TGSI_OPCODE_USLT:
> +   case TGSI_OPCODE_USNE:
> +   case TGSI_OPCODE_USHR:
> +   case TGSI_OPCODE_SHL:
> +   case TGSI_OPCODE_TXQ:
> +      return UTIL_FORMAT_TYPE_UNSIGNED;
> +   case TGSI_OPCODE_MOD:
> +   case TGSI_OPCODE_I2F:
> +   case TGSI_OPCODE_IDIV:
> +   case TGSI_OPCODE_IMAX:
> +   case TGSI_OPCODE_IMIN:
> +   case TGSI_OPCODE_INEG:
> +   case TGSI_OPCODE_ISGE:
> +   case TGSI_OPCODE_ISHR:
> +   case TGSI_OPCODE_ISLT:
> +   case TGSI_OPCODE_IABS:
> +   case TGSI_OPCODE_ISSG:
> +   case TGSI_OPCODE_UARL:
> +      return UTIL_FORMAT_TYPE_SIGNED;
> +   default:
> +      return UTIL_FORMAT_TYPE_FLOAT;
> +   }
> +}
> +
> +/*
> + * infer the destination type of a TGSI opcode.
> + * MOV is special so return VOID
> + */
> +enum util_format_type
> +tgsi_opcode_infer_dst_type( uint opcode )
> +{
> +   switch (opcode) {
> +   case TGSI_OPCODE_MOV:
> +      return UTIL_FORMAT_TYPE_VOID;
> +   case TGSI_OPCODE_F2U:
> +   case TGSI_OPCODE_AND:
> +   case TGSI_OPCODE_OR:
> +   case TGSI_OPCODE_XOR:
> +   case TGSI_OPCODE_SAD:
> +   case TGSI_OPCODE_UADD:
> +   case TGSI_OPCODE_UDIV:
> +   case TGSI_OPCODE_UMOD:
> +   case TGSI_OPCODE_UMAD:
> +   case TGSI_OPCODE_UMUL:
> +   case TGSI_OPCODE_UMAX:
> +   case TGSI_OPCODE_UMIN:
> +   case TGSI_OPCODE_USEQ:
> +   case TGSI_OPCODE_USGE:
> +   case TGSI_OPCODE_USLT:
> +   case TGSI_OPCODE_USNE:
> +   case TGSI_OPCODE_USHR:
> +   case TGSI_OPCODE_SHL:
> +   case TGSI_OPCODE_TXQ:
> +      return UTIL_FORMAT_TYPE_UNSIGNED;
> +   case TGSI_OPCODE_F2I:
> +   case TGSI_OPCODE_IDIV:
> +   case TGSI_OPCODE_IMAX:
> +   case TGSI_OPCODE_IMIN:
> +   case TGSI_OPCODE_INEG:
> +   case TGSI_OPCODE_ISGE:
> +   case TGSI_OPCODE_ISHR:
> +   case TGSI_OPCODE_ISLT:
> +   case TGSI_OPCODE_MOD:
> +   case TGSI_OPCODE_UARL:
> +   case TGSI_OPCODE_ARL:
> +   case TGSI_OPCODE_IABS:
> +   case TGSI_OPCODE_ISSG:
> +      return UTIL_FORMAT_TYPE_SIGNED;
> +   default:
> +      return UTIL_FORMAT_TYPE_FLOAT;
> +   }
> +}
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.h
> b/src/gallium/auxiliary/tgsi/tgsi_info.h
> index c0427fb..6a2d659 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_info.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_info.h
> @@ -30,6 +30,7 @@
>  
>  #include "pipe/p_compiler.h"
>  #include "pipe/p_shader_tokens.h"
> +#include "util/u_format.h"
>  
>  #if defined __cplusplus
>  extern "C" {
> @@ -90,6 +91,11 @@ tgsi_get_opcode_name( uint opcode );
>  const char *
>  tgsi_get_processor_name( uint processor );
>  
> +enum util_format_type
> +tgsi_opcode_infer_src_type( uint opcode );
> +
> +enum util_format_type
> +tgsi_opcode_infer_dst_type( uint opcode );
>  
>  #if defined __cplusplus
>  }
> --
> 1.7.7.6
> 
> _______________________________________________
> 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