[Mesa-dev] [PATCH v2 23/31] glsl: allow bindless samplers/images to be assigned

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Apr 26 08:23:26 UTC 2017



On 04/26/2017 09:54 AM, Nicolai Hähnle wrote:
> On 24.04.2017 12:35, Samuel Pitoiset wrote:
>> The ARB_bindless_texture allows sampler and image types to be
>> declared as temporary variables, to be converted from/to uvec2
>> using explicit constructors, so they can be assigned.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>  src/compiler/glsl/ast_to_hir.cpp | 21 ++++++++++++++++++---
>>  1 file changed, 18 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/compiler/glsl/ast_to_hir.cpp 
>> b/src/compiler/glsl/ast_to_hir.cpp
>> index e4d8bae2f5..8ad6211e2d 100644
>> --- a/src/compiler/glsl/ast_to_hir.cpp
>> +++ b/src/compiler/glsl/ast_to_hir.cpp
>> @@ -940,14 +940,29 @@ do_assignment(exec_list *instructions, struct 
>> _mesa_glsl_parse_state *state,
>>        lhs_var->data.assigned = true;
>>
>>     if (!error_emitted) {
>> +      bool is_read_only = lhs_var != NULL && (lhs_var->data.read_only ||
>> +                          (lhs_var->data.mode == 
>> ir_var_shader_storage &&
>> +                           lhs_var->data.image_read_only));
>> +
>> +      if (state->has_bindless()) {
>> +         if ((lhs_var->type->is_sampler() || 
>> lhs_var->type->is_image()) &&
>> +             (lhs_var->data.bindless || lhs_var->data.mode != 
>> ir_var_uniform)) {
>> +            /* A sampler (or an image) is considered bindless either 
>> if it has
>> +             * been declared in the default uniform block with the
>> +             * bindless_sampler (respectively bindless_image) layout 
>> qualifier,
>> +             * or when its storage is not uniform because this is not 
>> allowed
>> +             * without ARB_bindless_texture.
>> +             */
>> +            is_read_only = false;
>> +         }
>> +      }
> 
> I don't understand why this is necessary. I think the correct approach 
> is not to set lhs_var->data.read_only for sampler and image variables.

That could be a different approach, I will a second look at this patch.

> 
> Cheers,
> Nicolai
> 
> 
>> +
>>        if (non_lvalue_description != NULL) {
>>           _mesa_glsl_error(&lhs_loc, state,
>>                            "assignment to %s",
>>                            non_lvalue_description);
>>           error_emitted = true;
>> -      } else if (lhs_var != NULL && (lhs_var->data.read_only ||
>> -                 (lhs_var->data.mode == ir_var_shader_storage &&
>> -                  lhs_var->data.image_read_only))) {
>> +      } else if (is_read_only) {
>>           /* We can have image_read_only set on both images and buffer 
>> variables,
>>            * but in the former there is a distinction between 
>> assignments to
>>            * the variable itself (read_only) and to the memory they 
>> point to
>>
> 
> 


More information about the mesa-dev mailing list