summaryrefslogtreecommitdiffstats
path: root/src/glsl/linker.h
diff options
context:
space:
mode:
authorIlia Mirkin <imirkin@alum.mit.edu>2015-02-10 03:02:09 -0500
committerIlia Mirkin <imirkin@alum.mit.edu>2015-02-19 00:28:34 -0500
commit53bf7c8fd2e11a6c64d6ff3a98b56d64d2242505 (patch)
tree7214d2697606da847ffbaa0ba6878c125efdd1dd /src/glsl/linker.h
parent1ec715ce8b126da3cfe3b383054f9a176960c218 (diff)
downloadexternal_mesa3d-53bf7c8fd2e11a6c64d6ff3a98b56d64d2242505.zip
external_mesa3d-53bf7c8fd2e11a6c64d6ff3a98b56d64d2242505.tar.gz
external_mesa3d-53bf7c8fd2e11a6c64d6ff3a98b56d64d2242505.tar.bz2
glsl: fix uniform linking logic in the presence of structs
Add a enter/leave record callback so that the offset may be aligned to the proper value. Otherwise only leaf fields are called, and the first field needs to be aligned to the outer struct's base alignment while the last field needs to be aligned to the inner struct's base alignment. This removes most usage of the last field/record type values passed into visit_field. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'src/glsl/linker.h')
-rw-r--r--src/glsl/linker.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/glsl/linker.h b/src/glsl/linker.h
index 6ee5858..be4da5e 100644
--- a/src/glsl/linker.h
+++ b/src/glsl/linker.h
@@ -170,6 +170,12 @@ protected:
*/
virtual void visit_field(const glsl_struct_field *field);
+ virtual void enter_record(const glsl_type *type, const char *name,
+ bool row_major);
+
+ virtual void leave_record(const glsl_type *type, const char *name,
+ bool row_major);
+
private:
/**
* \param name_length Length of the current name \b not including the