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 <imirkin@alum.mit.edu> Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4583>
This commit is contained in:
@@ -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
|
||||
* <group_size_x> or <group_size_y> 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 <group_size_x>, <group_size_y>, and <group_size_z> 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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user