From: Ilia Mirkin Date: Thu, 16 Apr 2020 02:27:11 +0000 (-0400) Subject: mesa: add interaction between compute derivatives and variable local sizes X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ac0b8d58b963efbeadb4461b39f7d910996c2db7;p=mesa.git mesa: add interaction between compute derivatives and variable local sizes This is an added interaction in NV_compute_shader_derivatives added in Sep 2019. Signed-off-by: Ilia Mirkin Reviewed-by: Caio Marcelo de Oliveira Filho Part-of: --- diff --git a/src/mesa/main/compute.c b/src/mesa/main/compute.c index 013d6a68567..8e446afa9ee 100644 --- a/src/mesa/main/compute.c +++ b/src/mesa/main/compute.c @@ -178,6 +178,37 @@ validate_DispatchComputeGroupSizeARB(struct gl_context *ctx, return GL_FALSE; } + /* The NV_compute_shader_derivatives spec says: + * + * "An INVALID_VALUE error is generated by DispatchComputeGroupSizeARB if + * the active program for the compute shader stage has a compute shader + * using the "derivative_group_quadsNV" layout qualifier and + * or is not a multiple of two. + * + * An INVALID_VALUE error is generated by DispatchComputeGroupSizeARB if + * the active program for the compute shader stage has a compute shader + * using the "derivative_group_linearNV" layout qualifier and the product + * of , , and is not a multiple + * of four." + */ + if (prog->info.cs.derivative_group == DERIVATIVE_GROUP_QUADS && + ((group_size[0] & 1) || (group_size[1] & 1))) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glDispatchComputeGroupSizeARB(derivative_group_quadsNV " + "requires group_size_x (%d) and group_size_y (%d) to be " + "divisble by 2)", group_size[0], group_size[1]); + return GL_FALSE; + } + + if (prog->info.cs.derivative_group == DERIVATIVE_GROUP_LINEAR && + total_invocations & 3) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glDispatchComputeGroupSizeARB(derivative_group_linearNV " + "requires product of group sizes (%"PRIu64") to be divisible " + "by 4)", total_invocations); + return GL_FALSE; + } + return GL_TRUE; }