mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-19 18:05:31 +00:00
dawn_native: Skip more validation if it is disabled.
Also cache the boolean for IsValidationEnabled in the ProgrammablePassEncoder. Bug: dawn:635 Change-Id: I5f095d003d28b84eacbc488a7f8f3c346c646187 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/38521 Commit-Queue: Austin Eng <enga@chromium.org> Auto-Submit: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Stephen White <senorblanco@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
0ac48eb9a4
commit
f1f8394de0
@@ -68,24 +68,28 @@ namespace dawn_native {
|
||||
|
||||
void ComputePassEncoder::DispatchIndirect(BufferBase* indirectBuffer, uint64_t indirectOffset) {
|
||||
mEncodingContext->TryEncode(this, [&](CommandAllocator* allocator) -> MaybeError {
|
||||
DAWN_TRY(GetDevice()->ValidateObject(indirectBuffer));
|
||||
DAWN_TRY(ValidateCanUseAs(indirectBuffer, wgpu::BufferUsage::Indirect));
|
||||
if (IsValidationEnabled()) {
|
||||
DAWN_TRY(GetDevice()->ValidateObject(indirectBuffer));
|
||||
DAWN_TRY(ValidateCanUseAs(indirectBuffer, wgpu::BufferUsage::Indirect));
|
||||
|
||||
// Indexed dispatches need a compute-shader based validation to check that the dispatch
|
||||
// sizes aren't too big. Disallow them as unsafe until the validation is implemented.
|
||||
if (GetDevice()->IsToggleEnabled(Toggle::DisallowUnsafeAPIs)) {
|
||||
return DAWN_VALIDATION_ERROR(
|
||||
"DispatchIndirect is disallowed because it doesn't validate that the dispatch "
|
||||
"size is valid yet.");
|
||||
}
|
||||
// Indexed dispatches need a compute-shader based validation to check that the
|
||||
// dispatch sizes aren't too big. Disallow them as unsafe until the validation is
|
||||
// implemented.
|
||||
if (GetDevice()->IsToggleEnabled(Toggle::DisallowUnsafeAPIs)) {
|
||||
return DAWN_VALIDATION_ERROR(
|
||||
"DispatchIndirect is disallowed because it doesn't validate that the "
|
||||
"dispatch "
|
||||
"size is valid yet.");
|
||||
}
|
||||
|
||||
if (indirectOffset % 4 != 0) {
|
||||
return DAWN_VALIDATION_ERROR("Indirect offset must be a multiple of 4");
|
||||
}
|
||||
if (indirectOffset % 4 != 0) {
|
||||
return DAWN_VALIDATION_ERROR("Indirect offset must be a multiple of 4");
|
||||
}
|
||||
|
||||
if (indirectOffset >= indirectBuffer->GetSize() ||
|
||||
indirectOffset + kDispatchIndirectSize > indirectBuffer->GetSize()) {
|
||||
return DAWN_VALIDATION_ERROR("Indirect offset out of bounds");
|
||||
if (indirectOffset >= indirectBuffer->GetSize() ||
|
||||
indirectOffset + kDispatchIndirectSize > indirectBuffer->GetSize()) {
|
||||
return DAWN_VALIDATION_ERROR("Indirect offset out of bounds");
|
||||
}
|
||||
}
|
||||
|
||||
DispatchIndirectCmd* dispatch =
|
||||
@@ -101,7 +105,9 @@ namespace dawn_native {
|
||||
|
||||
void ComputePassEncoder::SetPipeline(ComputePipelineBase* pipeline) {
|
||||
mEncodingContext->TryEncode(this, [&](CommandAllocator* allocator) -> MaybeError {
|
||||
DAWN_TRY(GetDevice()->ValidateObject(pipeline));
|
||||
if (IsValidationEnabled()) {
|
||||
DAWN_TRY(GetDevice()->ValidateObject(pipeline));
|
||||
}
|
||||
|
||||
SetComputePipelineCmd* cmd =
|
||||
allocator->Allocate<SetComputePipelineCmd>(Command::SetComputePipeline);
|
||||
@@ -113,7 +119,7 @@ namespace dawn_native {
|
||||
|
||||
void ComputePassEncoder::WriteTimestamp(QuerySetBase* querySet, uint32_t queryIndex) {
|
||||
mEncodingContext->TryEncode(this, [&](CommandAllocator* allocator) -> MaybeError {
|
||||
if (GetDevice()->IsValidationEnabled()) {
|
||||
if (IsValidationEnabled()) {
|
||||
DAWN_TRY(GetDevice()->ValidateObject(querySet));
|
||||
DAWN_TRY(ValidateTimestampQuery(querySet, queryIndex));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user