[Mesa-dev] [PATCH v3 08/29] glsl: Uniform linking support for doubles
Ilia Mirkin
imirkin at alum.mit.edu
Sun Feb 8 01:00:24 PST 2015
From: Dave Airlie <airlied at gmail.com>
Signed-off-by: Dave Airlie <airlied at redhat.com>
---
src/glsl/link_uniforms.cpp | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index de2f6c9..0abb858 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -51,6 +51,9 @@ values_for_type(const glsl_type *type)
return 1;
} else if (type->is_array() && type->fields.array->is_sampler()) {
return type->array_size();
+ } else if ((type->is_array() && type->fields.array->is_double()) ||
+ type->is_double()) {
+ return 2 * type->component_slots();
} else {
return type->component_slots();
}
@@ -608,7 +611,11 @@ private:
}
if (type->without_array()->is_matrix()) {
- this->uniforms[id].matrix_stride = 16;
+ const unsigned N = type->base_type == GLSL_TYPE_DOUBLE ? 8 : 4;
+ const unsigned items = row_major ? type->matrix_columns : type->vector_elements;
+
+ assert(items <= 4);
+ this->uniforms[id].matrix_stride = glsl_align(items * N, 16);
this->uniforms[id].row_major = row_major;
} else {
this->uniforms[id].matrix_stride = 0;
--
2.0.5
More information about the mesa-dev
mailing list