[Mesa-dev] [PATCH 03/17] glsl: Uniform linking support for doubles (was: add double support)

Topi Pohjolainen topi.pohjolainen at intel.com
Thu Feb 5 03:05:27 PST 2015


From: Dave Airlie <airlied at gmail.com>

Signed-off-by: Dave Airlie <airlied at redhat.com>
---
 src/glsl/link_uniforms.cpp | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index de2f6c9..0db70d5 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,8 +611,11 @@ private:
 	 }
 
 	 if (type->without_array()->is_matrix()) {
-	    this->uniforms[id].matrix_stride = 16;
+            unsigned N = type->base_type == GLSL_TYPE_DOUBLE ? 8 : 4;
+            unsigned items = row_major ? type->matrix_columns : type->vector_elements;
+            this->uniforms[id].matrix_stride = glsl_align(items * N, 16);
 	    this->uniforms[id].row_major = row_major;
+
 	 } else {
 	    this->uniforms[id].matrix_stride = 0;
 	    this->uniforms[id].row_major = false;
-- 
1.9.3



More information about the mesa-dev mailing list