Expand error message if validating DispatchWorkgroups This CLs expands error message when DispatchWorkgroups with maxComputeWorkgroupsPerDimension to indicate when limits are hit that were not provided in the device requiredLimits. Note that DispatchWorkgroupsIndirect error message can't be expanded because validation happens in a shader. Bug: 42240683 Change-Id: I4026076c1ea27a78d3e64d33a5ed591063503d3b Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/219674 Reviewed-by: Brandon Jones <bajones@chromium.org> Commit-Queue: Fr <beaufort.francois@gmail.com>
diff --git a/src/dawn/native/ComputePassEncoder.cpp b/src/dawn/native/ComputePassEncoder.cpp index 7fb214d..8f5e854 100644 --- a/src/dawn/native/ComputePassEncoder.cpp +++ b/src/dawn/native/ComputePassEncoder.cpp
@@ -28,6 +28,7 @@ #include "dawn/native/ComputePassEncoder.h" #include "dawn/common/Range.h" +#include "dawn/native/Adapter.h" #include "dawn/native/BindGroup.h" #include "dawn/native/BindGroupLayout.h" #include "dawn/native/Buffer.h" @@ -212,23 +213,32 @@ DAWN_TRY(mCommandBufferState.ValidateCanDispatch()); - uint32_t workgroupsPerDimension = + uint32_t maxComputeWorkgroupsPerDimension = GetDevice()->GetLimits().v1.maxComputeWorkgroupsPerDimension; - DAWN_INVALID_IF(workgroupCountX > workgroupsPerDimension, - "Dispatch workgroup count X (%u) exceeds max compute " - "workgroups per dimension (%u).", - workgroupCountX, workgroupsPerDimension); + DAWN_INVALID_IF( + workgroupCountX > maxComputeWorkgroupsPerDimension, + "Dispatch workgroup count X (%u) exceeds max compute " + "workgroups per dimension (%u).%s", + workgroupCountX, maxComputeWorkgroupsPerDimension, + DAWN_INCREASE_LIMIT_MESSAGE(GetDevice()->GetAdapter(), + maxComputeWorkgroupsPerDimension, workgroupCountX)); - DAWN_INVALID_IF(workgroupCountY > workgroupsPerDimension, - "Dispatch workgroup count Y (%u) exceeds max compute " - "workgroups per dimension (%u).", - workgroupCountY, workgroupsPerDimension); + DAWN_INVALID_IF( + workgroupCountY > maxComputeWorkgroupsPerDimension, + "Dispatch workgroup count Y (%u) exceeds max compute " + "workgroups per dimension (%u).%s", + workgroupCountY, maxComputeWorkgroupsPerDimension, + DAWN_INCREASE_LIMIT_MESSAGE(GetDevice()->GetAdapter(), + maxComputeWorkgroupsPerDimension, workgroupCountY)); - DAWN_INVALID_IF(workgroupCountZ > workgroupsPerDimension, - "Dispatch workgroup count Z (%u) exceeds max compute " - "workgroups per dimension (%u).", - workgroupCountZ, workgroupsPerDimension); + DAWN_INVALID_IF( + workgroupCountZ > maxComputeWorkgroupsPerDimension, + "Dispatch workgroup count Z (%u) exceeds max compute " + "workgroups per dimension (%u).%s", + workgroupCountZ, maxComputeWorkgroupsPerDimension, + DAWN_INCREASE_LIMIT_MESSAGE(GetDevice()->GetAdapter(), + maxComputeWorkgroupsPerDimension, workgroupCountZ)); if (GetDevice()->IsCompatibilityMode()) { DAWN_TRY(mCommandBufferState.ValidateNoDifferentTextureViewsOnSameTexture());