[Mesa-dev] [RFC PATCH 13/26] glsl: apply image qualifiers to bindless images
Samuel Pitoiset
samuel.pitoiset at gmail.com
Wed Apr 12 10:16:05 UTC 2017
On 04/12/2017 02:13 AM, Timothy Arceri wrote:
>
>
> On 12/04/17 02:48, Samuel Pitoiset wrote:
>> The ARB_bindless_texture spec says:
>>
>> "Replace Section 4.1.X, (Images)"
>>
>> "Images may be declared as shader inputs and outputs, as uniform
>> variables, as temporary variables, and as function parameters."
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>> src/compiler/glsl/ast_to_hir.cpp | 27 +++++++++++++++++++++------
>> 1 file changed, 21 insertions(+), 6 deletions(-)
>>
>> diff --git a/src/compiler/glsl/ast_to_hir.cpp
>> b/src/compiler/glsl/ast_to_hir.cpp
>> index 4a0f3fe315..f52ba8181a 100644
>> --- a/src/compiler/glsl/ast_to_hir.cpp
>> +++ b/src/compiler/glsl/ast_to_hir.cpp
>> @@ -3383,12 +3383,27 @@ apply_image_qualifier_to_variable(const struct
>> ast_type_qualifier *qual,
>> {
>> const glsl_type *base_type = var->type->without_array();
>>
>> - if (base_type->is_image()) {
>> - if (var->data.mode != ir_var_uniform &&
>> - var->data.mode != ir_var_function_in) {
>> - _mesa_glsl_error(loc, state, "image variables may only be
>> declared as "
>> - "function parameters or uniform-qualified "
>> - "global variables");
>> + if (base_type->is_image() || base_type->is_bindless_image()) {
>> + if (base_type->is_bindless_image()) {
>> + if (var->data.mode != ir_var_auto &&
>> + var->data.mode != ir_var_uniform &&
>> + var->data.mode != ir_var_shader_in &&
>> + var->data.mode != ir_var_shader_out &&
>> + var->data.mode != ir_var_function_in &&
>> + var->data.mode != ir_var_function_out &&
>> + var->data.mode != ir_var_function_inout) {
>> + _mesa_glsl_error(loc, state, "bindless image variables
>> may only be "
>> + "declared as shader inputs and outputs,
>> as "
>> + "uniform variables, as temporary
>> variables and as "
>> + "function parameters");
>> + }
>> + } else {
>> + if (var->data.mode != ir_var_uniform &&
>> + var->data.mode != ir_var_function_in) {
>> + _mesa_glsl_error(loc, state, "image variables may only be
>> declared "
>> + "as function parameters or
>> uniform-qualified "
>> + "global variables");
>> + }
>> }
>
>
> There doesn't see to be any reason to combine these like this. Why not
> just:
>
> if (base_type->is_image()) {
> if (var->data.mode != ir_var_uniform &&
> var->data.mode != ir_var_function_in) {
> _mesa_glsl_error(loc, state, "image variables may only be
> declared as "
> "function parameters or uniform-qualified "
> "global variables");
> } else if (base_type->is_bindless_image()) {
> if (var->data.mode != ir_var_auto &&
> var->data.mode != ir_var_uniform &&
> var->data.mode != ir_var_shader_in &&
> var->data.mode != ir_var_shader_out &&
> var->data.mode != ir_var_function_in &&
> var->data.mode != ir_var_function_out &&
> var->data.mode != ir_var_function_inout) {
> _mesa_glsl_error(loc, state, "bindless image variables may
> only be "
> "declared as shader inputs and outputs, as "
> "uniform variables, as temporary variables
> and as "
> "function parameters");
> }
> }
Yes, this can probably be improved in some ways. Will do.
>
>
>
>>
>> var->data.image_read_only |= qual->flags.q.read_only;
>>
More information about the mesa-dev
mailing list