mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
glsl: avoid calling base_alignment when samplers are involved
Earlier commit53bf7c8fd2changed the logic to always call base_alignment on structs.1ec715ce8bhacked 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@alum.mit.edu> Reviewed-by: Tapani Palli <tapani.palli@intel.com>
This commit is contained in:
parent
43277fcd59
commit
baa22c8825
2 changed files with 4 additions and 9 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue