Improvement validation errors: Pipeline.cpp

Bug: dawn:563
Change-Id: Iac05390ab8e8dac9737974c3a9015110b9e55730
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/65481
Commit-Queue: Shrek Shao <shrekshao@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
This commit is contained in:
shrekshao 2021-09-30 18:40:50 +00:00 committed by Dawn LUCI CQ
parent 274d9958b2
commit 99be407367
1 changed files with 32 additions and 10 deletions

View File

@ -22,6 +22,25 @@
#include "dawn_native/ShaderModule.h"
namespace dawn_native {
absl::FormatConvertResult<absl::FormatConversionCharSet::kString> AbslFormatConvert(
SingleShaderStage value,
const absl::FormatConversionSpec& spec,
absl::FormatSink* s) {
switch (value) {
case SingleShaderStage::Compute:
s->Append("Compute");
break;
case SingleShaderStage::Vertex:
s->Append("Vertex");
break;
case SingleShaderStage::Fragment:
s->Append("Fragment");
break;
default:
UNREACHABLE();
}
return {true};
}
MaybeError ValidateProgrammableStage(DeviceBase* device,
const ShaderModuleBase* module,
@ -32,15 +51,15 @@ namespace dawn_native {
SingleShaderStage stage) {
DAWN_TRY(device->ValidateObject(module));
if (!module->HasEntryPoint(entryPoint)) {
return DAWN_VALIDATION_ERROR("Entry point doesn't exist in the module");
}
DAWN_INVALID_IF(!module->HasEntryPoint(entryPoint),
"Entry point \"%s\" doesn't exist in the shader module %s.", entryPoint,
module);
const EntryPointMetadata& metadata = module->GetEntryPoint(entryPoint);
if (metadata.stage != stage) {
return DAWN_VALIDATION_ERROR("Entry point isn't for the correct stage");
}
DAWN_INVALID_IF(metadata.stage != stage,
"The stage (%s) of the entry point \"%s\" isn't the expected one (%s).",
metadata.stage, entryPoint, stage);
if (layout != nullptr) {
DAWN_TRY(ValidateCompatibilityWithPipelineLayout(device, metadata, layout));
@ -140,9 +159,10 @@ namespace dawn_native {
DAWN_TRY(GetDevice()->ValidateIsAlive());
DAWN_TRY(GetDevice()->ValidateObject(this));
DAWN_TRY(GetDevice()->ValidateObject(mLayout.Get()));
if (groupIndex >= kMaxBindGroups) {
return DAWN_VALIDATION_ERROR("Bind group layout index out of bounds");
}
DAWN_INVALID_IF(
groupIndex >= kMaxBindGroups,
"Bind group layout index (%u) exceeds the maximum number of bind groups (%u).",
groupIndex, kMaxBindGroups);
return {};
}
@ -160,7 +180,9 @@ namespace dawn_native {
BindGroupLayoutBase* PipelineBase::APIGetBindGroupLayout(uint32_t groupIndexIn) {
Ref<BindGroupLayoutBase> result;
if (GetDevice()->ConsumedError(GetBindGroupLayout(groupIndexIn), &result)) {
if (GetDevice()->ConsumedError(GetBindGroupLayout(groupIndexIn), &result,
"Validating GetBindGroupLayout (%u) on %s", groupIndexIn,
this)) {
return BindGroupLayoutBase::MakeError(GetDevice());
}
return result.Detach();