summaryrefslogtreecommitdiff
path: root/ext/webgpu/src/error.rs
diff options
context:
space:
mode:
authorDante Issaias <dante@issaias.com>2022-07-20 01:22:26 +0100
committerGitHub <noreply@github.com>2022-07-20 02:22:26 +0200
commit2b1f145c3e51cf9885c073b78bd5882e80d258e3 (patch)
treeface88f9a6d6d109ebf8f659a59bc74e6f6ae8ee /ext/webgpu/src/error.rs
parent649536e2669eb496fc2d4dacd92fd1d6dbed50a7 (diff)
chore(ext): update webgpu (#15059)
Diffstat (limited to 'ext/webgpu/src/error.rs')
-rw-r--r--ext/webgpu/src/error.rs68
1 files changed, 42 insertions, 26 deletions
diff --git a/ext/webgpu/src/error.rs b/ext/webgpu/src/error.rs
index ae6e48054..fae0259a8 100644
--- a/ext/webgpu/src/error.rs
+++ b/ext/webgpu/src/error.rs
@@ -3,7 +3,9 @@ use deno_core::error::AnyError;
use deno_core::ResourceId;
use serde::Serialize;
use std::convert::From;
+use std::error::Error;
use std::fmt;
+use std::fmt::Write;
use wgpu_core::binding_model::CreateBindGroupError;
use wgpu_core::binding_model::CreateBindGroupLayoutError;
use wgpu_core::binding_model::CreatePipelineLayoutError;
@@ -29,6 +31,20 @@ use wgpu_core::resource::CreateSamplerError;
use wgpu_core::resource::CreateTextureError;
use wgpu_core::resource::CreateTextureViewError;
+fn fmt_err(err: &(dyn Error + 'static)) -> String {
+ let mut output = err.to_string();
+
+ let mut e = err.source();
+ while let Some(source) = e {
+ // No error possible, unwrap is fine here.
+ // https://github.com/rust-lang/rust/blob/1.47.0/library/alloc/src/string.rs#L2414-L2427
+ write!(output, ": {source}").unwrap();
+ e = source.source();
+ }
+
+ output
+}
+
#[derive(Serialize)]
pub struct WebGpuResult {
pub rid: Option<ResourceId>,
@@ -49,14 +65,14 @@ impl WebGpuResult {
) -> Self {
Self {
rid: Some(rid),
- err: err.map(|e| e.into()),
+ err: err.map(Into::into),
}
}
pub fn maybe_err<T: Into<WebGpuError>>(err: Option<T>) -> Self {
Self {
rid: None,
- err: err.map(|e| e.into()),
+ err: err.map(Into::into),
}
}
@@ -82,7 +98,7 @@ impl From<CreateBufferError> for WebGpuError {
match err {
CreateBufferError::Device(err) => err.into(),
CreateBufferError::AccessError(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -92,7 +108,7 @@ impl From<DeviceError> for WebGpuError {
match err {
DeviceError::Lost => WebGpuError::Lost,
DeviceError::OutOfMemory => WebGpuError::OutOfMemory,
- DeviceError::Invalid => WebGpuError::Validation(err.to_string()),
+ DeviceError::Invalid => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -101,7 +117,7 @@ impl From<BufferAccessError> for WebGpuError {
fn from(err: BufferAccessError) -> Self {
match err {
BufferAccessError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -110,7 +126,7 @@ impl From<CreateBindGroupLayoutError> for WebGpuError {
fn from(err: CreateBindGroupLayoutError) -> Self {
match err {
CreateBindGroupLayoutError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -119,7 +135,7 @@ impl From<CreatePipelineLayoutError> for WebGpuError {
fn from(err: CreatePipelineLayoutError) -> Self {
match err {
CreatePipelineLayoutError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -128,44 +144,44 @@ impl From<CreateBindGroupError> for WebGpuError {
fn from(err: CreateBindGroupError) -> Self {
match err {
CreateBindGroupError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
impl From<RenderBundleError> for WebGpuError {
fn from(err: RenderBundleError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
impl From<CreateRenderBundleError> for WebGpuError {
fn from(err: CreateRenderBundleError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
impl From<CopyError> for WebGpuError {
fn from(err: CopyError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
impl From<CommandEncoderError> for WebGpuError {
fn from(err: CommandEncoderError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
impl From<QueryError> for WebGpuError {
fn from(err: QueryError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
impl From<ComputePassError> for WebGpuError {
fn from(err: ComputePassError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
@@ -173,14 +189,14 @@ impl From<CreateComputePipelineError> for WebGpuError {
fn from(err: CreateComputePipelineError) -> Self {
match err {
CreateComputePipelineError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
impl From<GetBindGroupLayoutError> for WebGpuError {
fn from(err: GetBindGroupLayoutError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
@@ -188,14 +204,14 @@ impl From<CreateRenderPipelineError> for WebGpuError {
fn from(err: CreateRenderPipelineError) -> Self {
match err {
CreateRenderPipelineError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
impl From<RenderPassError> for WebGpuError {
fn from(err: RenderPassError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
@@ -203,7 +219,7 @@ impl From<CreateSamplerError> for WebGpuError {
fn from(err: CreateSamplerError) -> Self {
match err {
CreateSamplerError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -212,7 +228,7 @@ impl From<CreateShaderModuleError> for WebGpuError {
fn from(err: CreateShaderModuleError) -> Self {
match err {
CreateShaderModuleError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -221,14 +237,14 @@ impl From<CreateTextureError> for WebGpuError {
fn from(err: CreateTextureError) -> Self {
match err {
CreateTextureError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
impl From<CreateTextureViewError> for WebGpuError {
fn from(err: CreateTextureViewError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}
@@ -236,7 +252,7 @@ impl From<CreateQuerySetError> for WebGpuError {
fn from(err: CreateQuerySetError) -> Self {
match err {
CreateQuerySetError::Device(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -245,7 +261,7 @@ impl From<QueueSubmitError> for WebGpuError {
fn from(err: QueueSubmitError) -> Self {
match err {
QueueSubmitError::Queue(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
@@ -254,14 +270,14 @@ impl From<QueueWriteError> for WebGpuError {
fn from(err: QueueWriteError) -> Self {
match err {
QueueWriteError::Queue(err) => err.into(),
- err => WebGpuError::Validation(err.to_string()),
+ err => WebGpuError::Validation(fmt_err(&err)),
}
}
}
impl From<ClearError> for WebGpuError {
fn from(err: ClearError) -> Self {
- WebGpuError::Validation(err.to_string())
+ WebGpuError::Validation(fmt_err(&err))
}
}