Mesa (master): st: add st_glsl_type_dword_size() helper
Timothy Arceri
tarceri at kemper.freedesktop.org
Tue Mar 20 03:24:30 UTC 2018
Module: Mesa
Branch: master
Commit: a80cf442d939212da40951a0a57a0978de6f39a6
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a80cf442d939212da40951a0a57a0978de6f39a6
Author: Timothy Arceri <tarceri at itsqueeze.com>
Date: Tue Mar 13 12:34:50 2018 +1100
st: add st_glsl_type_dword_size() helper
This will be used to support uniform packing.
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
---
src/mesa/state_tracker/st_glsl_types.cpp | 43 ++++++++++++++++++++++++++++++++
src/mesa/state_tracker/st_glsl_types.h | 1 +
2 files changed, 44 insertions(+)
diff --git a/src/mesa/state_tracker/st_glsl_types.cpp b/src/mesa/state_tracker/st_glsl_types.cpp
index d4d2139d9d..ef7b7fa777 100644
--- a/src/mesa/state_tracker/st_glsl_types.cpp
+++ b/src/mesa/state_tracker/st_glsl_types.cpp
@@ -108,3 +108,46 @@ st_glsl_storage_type_size(const struct glsl_type *type, bool is_bindless)
}
return 0;
}
+
+int
+st_glsl_type_dword_size(const struct glsl_type *type)
+{
+ unsigned int size, i;
+
+ switch (type->base_type) {
+ case GLSL_TYPE_UINT:
+ case GLSL_TYPE_INT:
+ case GLSL_TYPE_FLOAT:
+ case GLSL_TYPE_BOOL:
+ return type->components();
+ case GLSL_TYPE_UINT16:
+ case GLSL_TYPE_INT16:
+ case GLSL_TYPE_FLOAT16:
+ return DIV_ROUND_UP(type->components(), 2);
+ case GLSL_TYPE_DOUBLE:
+ case GLSL_TYPE_UINT64:
+ case GLSL_TYPE_INT64:
+ return type->components() * 2;
+ case GLSL_TYPE_ARRAY:
+ return st_glsl_type_dword_size(type->fields.array) * type->length;
+ case GLSL_TYPE_STRUCT:
+ size = 0;
+ for (i = 0; i < type->length; i++) {
+ size += st_glsl_type_dword_size(type->fields.structure[i].type);
+ }
+ return size;
+ case GLSL_TYPE_IMAGE:
+ case GLSL_TYPE_SAMPLER:
+ case GLSL_TYPE_ATOMIC_UINT:
+ return 0;
+ case GLSL_TYPE_SUBROUTINE:
+ return 1;
+ case GLSL_TYPE_VOID:
+ case GLSL_TYPE_ERROR:
+ case GLSL_TYPE_INTERFACE:
+ case GLSL_TYPE_FUNCTION:
+ unreachable("not reached");
+ }
+
+ return 0;
+}
diff --git a/src/mesa/state_tracker/st_glsl_types.h b/src/mesa/state_tracker/st_glsl_types.h
index 915816d1fa..16b31b684f 100644
--- a/src/mesa/state_tracker/st_glsl_types.h
+++ b/src/mesa/state_tracker/st_glsl_types.h
@@ -36,6 +36,7 @@ extern "C" {
int st_glsl_storage_type_size(const struct glsl_type *type,
bool is_bindless);
+int st_glsl_type_dword_size(const struct glsl_type *type);
#ifdef __cplusplus
}
More information about the mesa-commit
mailing list