From 090fc593b44d41e5613b04931bbf46d268fca666 Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Mon, 14 Sep 2020 21:08:29 +0200 Subject: [PATCH] mesa: fix glUniform* when a struct contains a bindless sampler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Small example from #3271: layout (bindless_sampler) uniform; struct SamplerSparse { sampler2D tex; vec4 size; [...] }; uniform SamplerSparse foo; 'foo' will be marked as bindless but we should only take the assign-as-GLuint64 path for 'tex'. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3271 Fixes: 990c8d15ac3 ("mesa: fix setting uniform variables for bindless samplers/images") Reviewed-by: Marek Olšák Part-of: --- src/mesa/main/uniform_query.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp index db2f173dd2f..2b1fc8668f4 100644 --- a/src/mesa/main/uniform_query.cpp +++ b/src/mesa/main/uniform_query.cpp @@ -1043,10 +1043,12 @@ copy_uniforms_to_storage(gl_constant_value *storage, const unsigned offset, const unsigned components, enum glsl_base_type basicType) { - if (!uni->type->is_boolean() && !uni->is_bindless) { + bool copy_as_uint64 = uni->is_bindless && + (uni->type->is_sampler() || uni->type->is_image()); + if (!uni->type->is_boolean() && !copy_as_uint64) { memcpy(storage, values, sizeof(storage[0]) * components * count * size_mul); - } else if (uni->is_bindless) { + } else if (copy_as_uint64) { const union gl_constant_value *src = (const union gl_constant_value *) values; GLuint64 *dst = (GLuint64 *)&storage->i;