[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