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 <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6730>
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;