[Mesa-dev] [PATCH v2 19/31] glsl: fix explicit binding location for bindless samplers/images

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Apr 26 19:34:53 UTC 2017



On 04/26/2017 09:40 AM, Nicolai Hähnle wrote:
> On 24.04.2017 12:35, Samuel Pitoiset wrote:
>> The ARB_bindless_texture spec says:
>>
>>    "Interactions with GLSL 4.20"
>>
>>    "Without GLSL 4.20 support, sampler and image uniforms may only
>>     be initialized through the OpenGL API. With GLSL 4.20, sampler
>>     and image uniforms may be initialized in the shader using
>>
>>     layout(binding = integer-constant)
>>
>>     as described in section 4.4.4 "Opaque-Uniform Layout Qualifiers".
>>     When ARB_bindless_texture is supported, these initial binding
>>     values are always taken to mean a texture image or image unit
>>     number, not a bindless handle."
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>  src/compiler/glsl/ast_to_hir.cpp | 20 ++++++++++++++++++++
>>  1 file changed, 20 insertions(+)
>>
>> diff --git a/src/compiler/glsl/ast_to_hir.cpp 
>> b/src/compiler/glsl/ast_to_hir.cpp
>> index ae81ed95d8..943c25a224 100644
>> --- a/src/compiler/glsl/ast_to_hir.cpp
>> +++ b/src/compiler/glsl/ast_to_hir.cpp
>> @@ -2920,6 +2920,26 @@ apply_explicit_binding(struct 
>> _mesa_glsl_parse_state *state,
>>        return;
>>     }
>>
>> +   /* The ARB_bindless_texture_spec says:
>> +    *
>> +    * "Interactions with GLSL 4.20"
>> +    *
>> +    * "Without GLSL 4.20 support, sampler and image uniforms may only be
>> +    *  initialized through the OpenGL API. With GLSL 4.20, sampler 
>> and image
>> +    *  uniforms may be initialized in the shader using
>> +    *
>> +    *  layout(binding = integer-constant)
>> +    *
>> +    *  as described in section 4.4.4 "Opaque-Uniform Layout 
>> Qualifiers".  When
>> +    *  ARB_bindless_texture is supported, these initial binding 
>> values are
>> +    *  always taken to mean a texture image or image unit number, not a
>> +    *  bindless handle."
>> +    */
>> +   if (state->has_bindless() &&
>> +       (base_type->is_sampler() || base_type->is_image())) {
>> +      var->data.bindless = false;
>> +   }
> 
> I don't think this is correct. The way I understand the spec, saying
> 
>    layout (bindless_sampler, binding = 5) uniform sampler2D s;
> 
> means that s is still bindless, it's just that it's *initial* value is 
> set up as if the application had called
> 
>    glUniform1i(index of s, 5);
> 
> You're still allowed to later on change it to a bindless handle by 
> calling one of the glUniformHandleui64* functions.

After double-checking the spec, yeah that makes sense.

I will drop the patch.

Thanks for noticing this!

> 
> Cheers,
> Nicolai
> 
> 
>> +
>>     var->data.explicit_binding = true;
>>     var->data.binding = qual_binding;
>>
>>
> 
> 


More information about the mesa-dev mailing list