[Mesa-dev] [PATCH 06/11] glsl/linker: handle errors when a variable local size is used

Ian Romanick idr at freedesktop.org
Fri Sep 9 18:48:18 UTC 2016


On 09/08/2016 01:31 PM, Samuel Pitoiset wrote:
> Compute shaders can now include a fixed local size as defined by
> ARB_compute_shader or a variable size as defined by
> ARB_compute_variable_group_size.
> 
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/compiler/glsl/linker.cpp | 23 +++++++++++++++++++++--
>  1 file changed, 21 insertions(+), 2 deletions(-)
> 
> diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
> index c95edf3..e909455 100644
> --- a/src/compiler/glsl/linker.cpp
> +++ b/src/compiler/glsl/linker.cpp
> @@ -2074,6 +2074,7 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog,
>  {
>     for (int i = 0; i < 3; i++)
>        linked_shader->info.Comp.LocalSize[i] = 0;

Blank line here.

> +   linked_shader->info.Comp.LocalSizeVariable = false;
>  
>     /* This function is called for all shader stages, but it only has an effect
>      * for compute shaders.
> @@ -2109,6 +2110,20 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog,
>              linked_shader->info.Comp.LocalSize[i] =
>                 shader->info.Comp.LocalSize[i];
>           }
> +      } else if (shader->info.Comp.LocalSizeVariable) {
> +         if (linked_shader->info.Comp.LocalSize[0] != 0) {
> +            /* From the ARB_compute_variable_group_size spec:

Spec quote.

> +             *
> +             *     If one compute shader attached to a program declares a
> +             *     variable local group size and a second compute shader
> +             *     attached to the same program declares a fixed local group
> +             *     size, a link-time error results.
> +             */
> +            linker_error(prog, "computer shader defined with both fixed and "
                                   compute  :)

> +                         "variable local group size\n");
> +            return;
> +         }
> +         linked_shader->info.Comp.LocalSizeVariable = true;
>        }
>     }
>  
> @@ -2116,12 +2131,16 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog,
>      * since we already know we're in the right type of shader program
>      * for doing it.
>      */
> -   if (linked_shader->info.Comp.LocalSize[0] == 0) {
> -      linker_error(prog, "compute shader didn't declare local size\n");
> +   if (linked_shader->info.Comp.LocalSize[0] == 0 &&
> +       !linked_shader->info.Comp.LocalSizeVariable) {
> +      linker_error(prog, "compute shader must contain a fixed or a variable "
> +                         "local group size\n");
>        return;
>     }
>     for (int i = 0; i < 3; i++)
>        prog->Comp.LocalSize[i] = linked_shader->info.Comp.LocalSize[i];

Blank line here.

With those 4 nits fixed, this patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> +   prog->Comp.LocalSizeVariable =
> +      linked_shader->info.Comp.LocalSizeVariable;
>  }
>  
>  
> 



More information about the mesa-dev mailing list