[Mesa-dev] [PATCH 05/11] glsl: reject compute shaders with fixed and variable local size
Samuel Pitoiset
samuel.pitoiset at gmail.com
Sat Sep 10 13:44:37 UTC 2016
On 09/09/2016 08:46 PM, Ian Romanick wrote:
> On 09/08/2016 01:31 PM, Samuel Pitoiset wrote:
>> The ARB_compute_variable_group_size specification explains that
>> when a compute shader includes both a fixed and a variable local
>> size, a compile-time error occurs.
>
> I probably would have squashed this in with the previous commit, but
> it's fine either way.
>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>> src/compiler/glsl/ast_to_hir.cpp | 14 ++++++++++++++
>> 1 file changed, 14 insertions(+)
>>
>> diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
>> index 4fc4c5c..a53a82e 100644
>> --- a/src/compiler/glsl/ast_to_hir.cpp
>> +++ b/src/compiler/glsl/ast_to_hir.cpp
>> @@ -8013,6 +8013,20 @@ ast_cs_input_layout::hir(exec_list *instructions,
>> }
>> }
>>
>> + /* From the ARB_compute_variable_group_size specification:
>
> Same comment about spec quotes.
Sure.
>
> It's hard to tell from just the patch... is this check order dependent?
> Does it correct handle all the cases:
>
> // case 1
> layout(local_size_variable, local_size_x = 32, local_size_y = 32);
>
> // case 2
> layout(local_size_x = 32, local_size_y = 32, local_size_variable);
>
> // case 3
> layout(local_size_variable);
> layout(local_size_x = 32, local_size_y = 32);
>
> // case 4
> layout(local_size_x = 32, local_size_y = 32);
> layout(local_size_variable);
Yes, it does, I have just tested locally.
>
>> + *
>> + * If a compute shader including a *local_size_variable* qualifier also
>> + * declares a fixed local group size using the *local_size_x*,
>> + * *local_size_y*, or *local_size_z* qualifiers, a compile-time error
>> + * results
>> + */
>> + if (state->cs_input_local_size_variable_specified) {
>> + _mesa_glsl_error(&loc, state,
>> + "compute shader can't include both a variable and a "
>> + "fixed local group size");
>> + return NULL;
>> + }
>> +
>> state->cs_input_local_size_specified = true;
>> for (int i = 0; i < 3; i++)
>> state->cs_input_local_size[i] = qual_local_size[i];
>>
>
More information about the mesa-dev
mailing list