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.pitoi...@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; + } } }
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev