Summary: | [Bisected] dEQP-GLES3: uniform linking logic in the presence of structs | ||
---|---|---|---|
Product: | Mesa | Reporter: | Samuel Iglesias Gonsálvez <siglesias> |
Component: | Mesa core | Assignee: | mesa-dev |
Status: | RESOLVED FIXED | QA Contact: | mesa-dev |
Severity: | normal | ||
Priority: | medium | CC: | imirkin, siglesias |
Version: | git | ||
Hardware: | Other | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Attachments: | patch to fix the issue |
Description
Samuel Iglesias Gonsálvez
2015-03-23 08:33:34 UTC
Where might one find a copy of this test to see what it's doing? Nevermind, reproduced, will send a piglit test shortly. (And perhaps a fix, too...) Created attachment 114547 [details] [review] patch to fix the issue I took a look earlier, this might be the fix. Yeah.... IMO that's the wrong fix though. I think my earlier code was just bonkers (which I knew at the time, but was hoping I could get away with). This is what I'm testing right now: 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)); } (In reply to Ilia Mirkin from comment #4) > Yeah.... IMO that's the wrong fix though. I think my earlier code was just > bonkers (which I knew at the time, but was hoping I could get away with). I think 1ec715ce was fine as then you don't need to make special cases here and there in the already quite complicated code. > This is what I'm testing right now: > > 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)); > } Yep, that should do it (if nothing else depends on 1ec715ce). Pushed as baa22c8825133a69fd0657f09d2a027236233eb1 upstream. Sorry for the breakage! |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.