[Mesa-dev] [PATCH v2 11/14] st/mesa: expose ARB_compute_variable_group_size

Nicolai Hähnle nhaehnle at gmail.com
Mon Sep 12 15:26:29 UTC 2016



On 11.09.2016 20:45, Samuel Pitoiset wrote:
> This extension is only exposed if the underlying driver supports
> ARB_compute_shader and if PIPE_COMPUTE_MAX_VARIABLE_THREADS_PER_BLOCK
> is set.
>
> v2: - expose the ext based on that new cap
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/mesa/state_tracker/st_extensions.c | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
>
> diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
> index 807fbfb..ad7c637 100644
> --- a/src/mesa/state_tracker/st_extensions.c
> +++ b/src/mesa/state_tracker/st_extensions.c
> @@ -1196,6 +1196,28 @@ void st_init_extensions(struct pipe_screen *screen,
>           extensions->ARB_compute_shader =
>                                        extensions->ARB_shader_image_load_store &&
>                                        extensions->ARB_shader_atomic_counters;
> +
> +         if (extensions->ARB_compute_shader) {
> +            uint64_t max_variable_threads_per_block;
> +
> +            screen->get_compute_param(screen, PIPE_SHADER_IR_TGSI,
> +                                      PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK,
> +                                      &max_variable_threads_per_block);

I think this should check the return value. Or, in the earlier patch, 
the handling in sp_screen.c needs to be changed. Not sure what the 
convention should be, but as-is, using this with softpipe will not 
initialize max_variable_threads_per_block.

Nicolai

> +
> +            for (i = 0; i < 3; i++) {
> +               /* Clamp the values to avoid having a local work group size
> +                * greater than the maximum number of invocations.
> +                */
> +               consts->MaxComputeVariableGroupSize[i] =
> +                  MIN2(consts->MaxComputeWorkGroupSize[i],
> +                       max_variable_threads_per_block);
> +            }
> +            consts->MaxComputeVariableGroupInvocations =
> +               max_variable_threads_per_block;
> +
> +            extensions->ARB_compute_variable_group_size =
> +               max_variable_threads_per_block > 0;
> +         }
>        }
>     }
>
>


More information about the mesa-dev mailing list