Mesa (master): glsl: avoid calling base_alignment when samplers are involved
Ilia Mirkin
imirkin at kemper.freedesktop.org
Tue Mar 24 14:11:42 UTC 2015
Module: Mesa
Branch: master
Commit: baa22c8825133a69fd0657f09d2a027236233eb1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=baa22c8825133a69fd0657f09d2a027236233eb1
Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date: Mon Mar 23 06:32:08 2015 -0400
glsl: avoid calling base_alignment when samplers are involved
Earlier commit 53bf7c8fd2e changed the logic to always call
base_alignment on structs. 1ec715ce8b12 hacked the function to return 0
for sampler fields, but didn't handle sampler arrays. Instead of
extending the hack, avoid calling base_alignment in the first place on
non-UBO uniforms.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89726
Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Tapani Palli <tapani.palli at intel.com>
---
src/glsl/glsl_types.cpp | 9 ---------
src/glsl/link_uniforms.cpp | 4 ++++
2 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
index 38b37a6..be87b0a 100644
--- a/src/glsl/glsl_types.cpp
+++ b/src/glsl/glsl_types.cpp
@@ -1077,15 +1077,6 @@ glsl_type::std140_base_alignment(bool row_major) const
return base_alignment;
}
- /* A sampler may never occur in a UBO (without bindless of some sort),
- * however it is convenient to use this alignment function even with
- * regular uniforms. This allows use of this function on uniform structs
- * that contain samplers.
- */
- if (this->is_sampler()) {
- return 0;
- }
-
assert(!"not reached");
return -1;
}
diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index 799c74b..59adc29 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -547,6 +547,8 @@ private:
virtual void enter_record(const glsl_type *type, const char *name,
bool row_major) {
assert(type->is_record());
+ if (this->ubo_block_index == -1)
+ return;
this->ubo_byte_offset = glsl_align(
this->ubo_byte_offset, type->std140_base_alignment(row_major));
}
@@ -554,6 +556,8 @@ private:
virtual void leave_record(const glsl_type *type, const char *name,
bool row_major) {
assert(type->is_record());
+ if (this->ubo_block_index == -1)
+ return;
this->ubo_byte_offset = glsl_align(
this->ubo_byte_offset, type->std140_base_alignment(row_major));
}
More information about the mesa-commit
mailing list