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

Nicolai Hähnle nhaehnle at gmail.com
Mon Sep 12 16:16:54 UTC 2016


On 12.09.2016 17:43, Samuel Pitoiset wrote:
>
>
> On 09/12/2016 05:26 PM, Nicolai Hähnle wrote:
>>
>>
>> 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.
>
> I think we never check the return value of get_compute_param(). But
> initializing max_variable_threads_per_block to 0 should actualy help,
> what do you think?

Yes, that should work as well. Fine with me.

Cheers,
Nicolai

>
>>
>> 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