st/mesa: expose ARB_compute_variable_group_size

This extension is only exposed if the underlying driver supports
ARB_compute_shader and if PIPE_COMPUTE_MAX_VARIABLE_THREADS_PER_BLOCK
is set.

v3: - initialize max_variable_threads_per_block to 0
v2: - expose the ext based on that new cap

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Samuel Pitoiset 2016-09-07 18:00:16 +02:00
parent dfd7734cb7
commit 590734fa0d

View file

@ -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 = 0;
screen->get_compute_param(screen, PIPE_SHADER_IR_TGSI,
PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK,
&max_variable_threads_per_block);
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;
}
}
}