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 <airl...@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 <airl...@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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev