diff options
author | Rob Clark <robclark@freedesktop.org> | 2016-03-24 14:14:36 -0400 |
---|---|---|
committer | Rob Clark <robclark@freedesktop.org> | 2016-05-11 12:20:12 -0400 |
commit | 697382eb61a9091ea0fa8b5836c9e7d281e9e1c5 (patch) | |
tree | 41389fbb0552300e5a0d3c9709e4f8fcddc74b90 /src/mesa/state_tracker/st_glsl_to_tgsi.cpp | |
parent | 0e5a369879e33085fbbd2dfce4e77799c4c95d30 (diff) | |
download | external_mesa3d-697382eb61a9091ea0fa8b5836c9e7d281e9e1c5.zip external_mesa3d-697382eb61a9091ea0fa8b5836c9e7d281e9e1c5.tar.gz external_mesa3d-697382eb61a9091ea0fa8b5836c9e7d281e9e1c5.tar.bz2 |
mesa/st: split the type_size calculation into it's own file
We'll want to re-use this for NIR.
Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Diffstat (limited to 'src/mesa/state_tracker/st_glsl_to_tgsi.cpp')
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 64 |
1 files changed, 3 insertions, 61 deletions
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 9cf204a..58b6634 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -52,6 +52,7 @@ #include "st_program.h" #include "st_mesa_to_tgsi.h" #include "st_format.h" +#include "st_glsl_types.h" #define PROGRAM_ANY_CONST ((1 << PROGRAM_STATE_VAR) | \ @@ -1165,72 +1166,13 @@ glsl_to_tgsi_visitor::st_src_reg_for_type(int type, int val) static int attrib_type_size(const struct glsl_type *type, bool is_vs_input) { - unsigned int i; - int size; - - switch (type->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_BOOL: - if (type->is_matrix()) { - return type->matrix_columns; - } else { - /* Regardless of size of vector, it gets a vec4. This is bad - * packing for things like floats, but otherwise arrays become a - * mess. Hopefully a later pass over the code can pack scalars - * down if appropriate. - */ - return 1; - } - break; - case GLSL_TYPE_DOUBLE: - if (type->is_matrix()) { - if (type->vector_elements <= 2 || is_vs_input) - return type->matrix_columns; - else - return type->matrix_columns * 2; - } else { - /* For doubles if we have a double or dvec2 they fit in one - * vec4, else they need 2 vec4s. - */ - if (type->vector_elements <= 2 || is_vs_input) - return 1; - else - return 2; - } - break; - case GLSL_TYPE_ARRAY: - assert(type->length > 0); - return attrib_type_size(type->fields.array, is_vs_input) * type->length; - case GLSL_TYPE_STRUCT: - size = 0; - for (i = 0; i < type->length; i++) { - size += attrib_type_size(type->fields.structure[i].type, is_vs_input); - } - return size; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_SUBROUTINE: - /* Samplers take up one slot in UNIFORMS[], but they're baked in - * at link time. - */ - return 1; - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_INTERFACE: - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - case GLSL_TYPE_FUNCTION: - assert(!"Invalid type in type_size"); - break; - } - return 0; + return st_glsl_attrib_type_size(type, is_vs_input); } static int type_size(const struct glsl_type *type) { - return attrib_type_size(type, false); + return st_glsl_type_size(type); } /** |