mesa: fix glUniform* when a struct contains a bindless sampler

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: 990c8d15ac ("mesa: fix setting uniform variables for bindless samplers/images")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6730>
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2020-09-14 21:08:29 +02:00 committed by Marge Bot
parent 77af1ca690
commit 090fc593b4

View file

@ -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;