mirror of
https://github.com/servo/servo.git
synced 2025-08-01 03:30:33 +01:00
Auto merge of #27536 - kunalmohan:update-wgpu, r=kvark
Major fixes in error reporting in GPUCommandEncoder and ErrorScope Model <!-- Please describe your changes on the following line: --> 1. Update wgpu to use the error model on wgpu-core side. Register error Ids separately. 2. ~~Record errors only in `GPUCommandEncoder.finish()`. Errors are no longer recorded in ErrorScopes in transfer commands or while recording passes. Any errors that occur are stored on the server-side in `error_command_encoders: HashMap<id::CommandEncoderId, String>` and reported on `CommandEncoderFinish`. Note: This should be reverted when the spec gets updated.~~ 3. Correct a major flaw in ErrorScope Model. If multiple operations are issued inside scope and an early operation fails, the promise resolves and script execution continues. The scope, however, was not popped until the results of all its operations were received. This meant that if the user issues another operation, it was assumed to be issued in an error scope that has already been popped by the user, which led to the failure of a number of tests. This is solved by storing a `popped` boolean to check whether `popErrorScope()` has been called on a scope or not. Operation is now issued in the lastest scope for which `popped == false`. One of the tests used to crash, but it no longer does (All subtests under it fail now). That explains the large number of failing test expectations that have been added. Most of them fail due to the tests being outdated. I'll switch to the updated branch in the next PR. r?@kvark --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors <!-- Either: --> - [X] There are tests for these changes <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
commit
53467b80b9
8 changed files with 1200 additions and 508 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -6945,7 +6945,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wgpu-core"
|
name = "wgpu-core"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
source = "git+https://github.com/gfx-rs/wgpu#872a6c4c2bab5591838219c34e0cbf5fa9c2ec85"
|
source = "git+https://github.com/gfx-rs/wgpu#8057acf120f9944056a6b5de6cf326f18ae7671d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec 0.5.1",
|
"arrayvec 0.5.1",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
|
@ -6972,7 +6972,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wgpu-types"
|
name = "wgpu-types"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
source = "git+https://github.com/gfx-rs/wgpu#872a6c4c2bab5591838219c34e0cbf5fa9c2ec85"
|
source = "git+https://github.com/gfx-rs/wgpu#8057acf120f9944056a6b5de6cf326f18ae7671d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
|
@ -125,14 +125,32 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
&self,
|
&self,
|
||||||
descriptor: &GPUComputePassDescriptor,
|
descriptor: &GPUComputePassDescriptor,
|
||||||
) -> DomRoot<GPUComputePassEncoder> {
|
) -> DomRoot<GPUComputePassEncoder> {
|
||||||
|
let scope_id = self.device.use_current_scope();
|
||||||
self.set_state(
|
self.set_state(
|
||||||
GPUCommandEncoderState::EncodingComputePass,
|
GPUCommandEncoderState::EncodingComputePass,
|
||||||
GPUCommandEncoderState::Open,
|
GPUCommandEncoderState::Open,
|
||||||
);
|
);
|
||||||
|
let (compute_pass, res) = if !self.valid.get() {
|
||||||
|
(
|
||||||
|
None,
|
||||||
|
WebGPUOpResult::ValidationError(String::from(
|
||||||
|
"CommandEncoder is not in Open State",
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
(
|
||||||
|
Some(wgpu_com::ComputePass::new(self.encoder.0)),
|
||||||
|
WebGPUOpResult::Success,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
self.device.handle_server_msg(scope_id, res);
|
||||||
|
|
||||||
GPUComputePassEncoder::new(
|
GPUComputePassEncoder::new(
|
||||||
&self.global(),
|
&self.global(),
|
||||||
self.channel.clone(),
|
self.channel.clone(),
|
||||||
&self,
|
&self,
|
||||||
|
compute_pass,
|
||||||
descriptor.parent.label.as_ref().cloned(),
|
descriptor.parent.label.as_ref().cloned(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -142,11 +160,20 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
&self,
|
&self,
|
||||||
descriptor: &GPURenderPassDescriptor,
|
descriptor: &GPURenderPassDescriptor,
|
||||||
) -> DomRoot<GPURenderPassEncoder> {
|
) -> DomRoot<GPURenderPassEncoder> {
|
||||||
|
let scope_id = self.device.use_current_scope();
|
||||||
self.set_state(
|
self.set_state(
|
||||||
GPUCommandEncoderState::EncodingRenderPass,
|
GPUCommandEncoderState::EncodingRenderPass,
|
||||||
GPUCommandEncoderState::Open,
|
GPUCommandEncoderState::Open,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let (render_pass, res) = if !self.valid.get() {
|
||||||
|
(
|
||||||
|
None,
|
||||||
|
WebGPUOpResult::ValidationError(String::from(
|
||||||
|
"CommandEncoder is not in Open State",
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
let depth_stencil = descriptor.depthStencilAttachment.as_ref().map(|depth| {
|
let depth_stencil = descriptor.depthStencilAttachment.as_ref().map(|depth| {
|
||||||
let (depth_load_op, clear_depth) = match depth.depthLoadValue {
|
let (depth_load_op, clear_depth) = match depth.depthLoadValue {
|
||||||
GPULoadOpOrFloat::GPULoadOp(_) => (wgpu_com::LoadOp::Load, 0.0f32),
|
GPULoadOpOrFloat::GPULoadOp(_) => (wgpu_com::LoadOp::Load, 0.0f32),
|
||||||
|
@ -154,7 +181,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
};
|
};
|
||||||
let (stencil_load_op, clear_stencil) = match depth.stencilLoadValue {
|
let (stencil_load_op, clear_stencil) = match depth.stencilLoadValue {
|
||||||
GPUStencilLoadValue::GPULoadOp(_) => (wgpu_com::LoadOp::Load, 0u32),
|
GPUStencilLoadValue::GPULoadOp(_) => (wgpu_com::LoadOp::Load, 0u32),
|
||||||
GPUStencilLoadValue::RangeEnforcedUnsignedLong(l) => (wgpu_com::LoadOp::Clear, l),
|
GPUStencilLoadValue::RangeEnforcedUnsignedLong(l) => {
|
||||||
|
(wgpu_com::LoadOp::Clear, l)
|
||||||
|
},
|
||||||
};
|
};
|
||||||
let depth_channel = wgpu_com::PassChannel {
|
let depth_channel = wgpu_com::PassChannel {
|
||||||
load_op: depth_load_op,
|
load_op: depth_load_op,
|
||||||
|
@ -236,8 +265,13 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
),
|
),
|
||||||
depth_stencil_attachment: depth_stencil.as_ref(),
|
depth_stencil_attachment: depth_stencil.as_ref(),
|
||||||
};
|
};
|
||||||
|
(
|
||||||
|
Some(wgpu_com::RenderPass::new(self.encoder.0, desc)),
|
||||||
|
WebGPUOpResult::Success,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
let render_pass = wgpu_com::RenderPass::new(self.encoder.0, desc);
|
self.device.handle_server_msg(scope_id, res);
|
||||||
|
|
||||||
GPURenderPassEncoder::new(
|
GPURenderPassEncoder::new(
|
||||||
&self.global(),
|
&self.global(),
|
||||||
|
@ -257,10 +291,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
destination_offset: GPUSize64,
|
destination_offset: GPUSize64,
|
||||||
size: GPUSize64,
|
size: GPUSize64,
|
||||||
) {
|
) {
|
||||||
let valid = *self.state.borrow() == GPUCommandEncoderState::Open;
|
|
||||||
let scope_id = self.device.use_current_scope();
|
let scope_id = self.device.use_current_scope();
|
||||||
|
|
||||||
if !valid {
|
if !(*self.state.borrow() == GPUCommandEncoderState::Open) {
|
||||||
self.device.handle_server_msg(
|
self.device.handle_server_msg(
|
||||||
scope_id,
|
scope_id,
|
||||||
WebGPUOpResult::ValidationError(String::from(
|
WebGPUOpResult::ValidationError(String::from(
|
||||||
|
@ -299,10 +332,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
destination: &GPUTextureCopyView,
|
destination: &GPUTextureCopyView,
|
||||||
copy_size: GPUExtent3D,
|
copy_size: GPUExtent3D,
|
||||||
) {
|
) {
|
||||||
let valid = *self.state.borrow() == GPUCommandEncoderState::Open;
|
|
||||||
let scope_id = self.device.use_current_scope();
|
let scope_id = self.device.use_current_scope();
|
||||||
|
|
||||||
if !valid {
|
if !(*self.state.borrow() == GPUCommandEncoderState::Open) {
|
||||||
self.device.handle_server_msg(
|
self.device.handle_server_msg(
|
||||||
scope_id,
|
scope_id,
|
||||||
WebGPUOpResult::ValidationError(String::from(
|
WebGPUOpResult::ValidationError(String::from(
|
||||||
|
@ -341,10 +373,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
destination: &GPUBufferCopyView,
|
destination: &GPUBufferCopyView,
|
||||||
copy_size: GPUExtent3D,
|
copy_size: GPUExtent3D,
|
||||||
) {
|
) {
|
||||||
let valid = *self.state.borrow() == GPUCommandEncoderState::Open;
|
|
||||||
let scope_id = self.device.use_current_scope();
|
let scope_id = self.device.use_current_scope();
|
||||||
|
|
||||||
if !valid {
|
if !(*self.state.borrow() == GPUCommandEncoderState::Open) {
|
||||||
self.device.handle_server_msg(
|
self.device.handle_server_msg(
|
||||||
scope_id,
|
scope_id,
|
||||||
WebGPUOpResult::ValidationError(String::from(
|
WebGPUOpResult::ValidationError(String::from(
|
||||||
|
@ -383,10 +414,9 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
destination: &GPUTextureCopyView,
|
destination: &GPUTextureCopyView,
|
||||||
copy_size: GPUExtent3D,
|
copy_size: GPUExtent3D,
|
||||||
) {
|
) {
|
||||||
let valid = *self.state.borrow() == GPUCommandEncoderState::Open;
|
|
||||||
let scope_id = self.device.use_current_scope();
|
let scope_id = self.device.use_current_scope();
|
||||||
|
|
||||||
if !valid {
|
if !(*self.state.borrow() == GPUCommandEncoderState::Open) {
|
||||||
self.device.handle_server_msg(
|
self.device.handle_server_msg(
|
||||||
scope_id,
|
scope_id,
|
||||||
WebGPUOpResult::ValidationError(String::from(
|
WebGPUOpResult::ValidationError(String::from(
|
||||||
|
@ -423,6 +453,7 @@ impl GPUCommandEncoderMethods for GPUCommandEncoder {
|
||||||
WebGPURequest::CommandEncoderFinish {
|
WebGPURequest::CommandEncoderFinish {
|
||||||
command_encoder_id: self.encoder.0,
|
command_encoder_id: self.encoder.0,
|
||||||
device_id: self.device.id().0,
|
device_id: self.device.id().0,
|
||||||
|
is_error: !self.valid.get(),
|
||||||
// TODO(zakorgy): We should use `_descriptor` here after it's not empty
|
// TODO(zakorgy): We should use `_descriptor` here after it's not empty
|
||||||
// and the underlying wgpu-core struct is serializable
|
// and the underlying wgpu-core struct is serializable
|
||||||
},
|
},
|
||||||
|
|
|
@ -33,13 +33,14 @@ impl GPUComputePassEncoder {
|
||||||
fn new_inherited(
|
fn new_inherited(
|
||||||
channel: WebGPU,
|
channel: WebGPU,
|
||||||
parent: &GPUCommandEncoder,
|
parent: &GPUCommandEncoder,
|
||||||
|
compute_pass: Option<ComputePass>,
|
||||||
label: Option<USVString>,
|
label: Option<USVString>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
channel,
|
channel,
|
||||||
reflector_: Reflector::new(),
|
reflector_: Reflector::new(),
|
||||||
label: DomRefCell::new(label),
|
label: DomRefCell::new(label),
|
||||||
compute_pass: DomRefCell::new(Some(ComputePass::new(parent.id().0))),
|
compute_pass: DomRefCell::new(compute_pass),
|
||||||
command_encoder: Dom::from_ref(parent),
|
command_encoder: Dom::from_ref(parent),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,10 +49,16 @@ impl GPUComputePassEncoder {
|
||||||
global: &GlobalScope,
|
global: &GlobalScope,
|
||||||
channel: WebGPU,
|
channel: WebGPU,
|
||||||
parent: &GPUCommandEncoder,
|
parent: &GPUCommandEncoder,
|
||||||
|
compute_pass: Option<ComputePass>,
|
||||||
label: Option<USVString>,
|
label: Option<USVString>,
|
||||||
) -> DomRoot<Self> {
|
) -> DomRoot<Self> {
|
||||||
reflect_dom_object(
|
reflect_dom_object(
|
||||||
Box::new(GPUComputePassEncoder::new_inherited(channel, parent, label)),
|
Box::new(GPUComputePassEncoder::new_inherited(
|
||||||
|
channel,
|
||||||
|
parent,
|
||||||
|
compute_pass,
|
||||||
|
label,
|
||||||
|
)),
|
||||||
global,
|
global,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -88,7 +95,7 @@ impl GPUComputePassEncoderMethods for GPUComputePassEncoder {
|
||||||
|
|
||||||
/// https://gpuweb.github.io/gpuweb/#dom-gpurenderpassencoder-endpass
|
/// https://gpuweb.github.io/gpuweb/#dom-gpurenderpassencoder-endpass
|
||||||
fn EndPass(&self) {
|
fn EndPass(&self) {
|
||||||
if let Some(compute_pass) = self.compute_pass.borrow_mut().take() {
|
let compute_pass = self.compute_pass.borrow_mut().take();
|
||||||
self.channel
|
self.channel
|
||||||
.0
|
.0
|
||||||
.send((
|
.send((
|
||||||
|
@ -106,7 +113,6 @@ impl GPUComputePassEncoderMethods for GPUComputePassEncoder {
|
||||||
GPUCommandEncoderState::EncodingComputePass,
|
GPUCommandEncoderState::EncodingComputePass,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// https://gpuweb.github.io/gpuweb/#dom-gpuprogrammablepassencoder-setbindgroup
|
/// https://gpuweb.github.io/gpuweb/#dom-gpuprogrammablepassencoder-setbindgroup
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
|
|
|
@ -64,7 +64,7 @@ use crate::script_runtime::JSContext as SafeJSContext;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use js::jsapi::{Heap, JSObject};
|
use js::jsapi::{Heap, JSObject};
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::cell::RefCell;
|
use std::cell::{Cell, RefCell};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::ptr::NonNull;
|
use std::ptr::NonNull;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
@ -82,10 +82,17 @@ struct ErrorScopeInfo {
|
||||||
promise: Option<Rc<Promise>>,
|
promise: Option<Rc<Promise>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(JSTraceable, MallocSizeOf)]
|
||||||
|
struct ErrorScopeMetadata {
|
||||||
|
id: ErrorScopeId,
|
||||||
|
filter: GPUErrorFilter,
|
||||||
|
popped: Cell<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(JSTraceable, MallocSizeOf)]
|
#[derive(JSTraceable, MallocSizeOf)]
|
||||||
struct ScopeContext {
|
struct ScopeContext {
|
||||||
error_scopes: HashMap<ErrorScopeId, ErrorScopeInfo>,
|
error_scopes: HashMap<ErrorScopeId, ErrorScopeInfo>,
|
||||||
scope_stack: Vec<(ErrorScopeId, GPUErrorFilter)>,
|
scope_stack: Vec<ErrorScopeMetadata>,
|
||||||
next_scope_id: ErrorScopeId,
|
next_scope_id: ErrorScopeId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,8 +196,8 @@ impl GPUDevice {
|
||||||
.scope_stack
|
.scope_stack
|
||||||
.iter()
|
.iter()
|
||||||
.rev()
|
.rev()
|
||||||
.find(|&&(id, fil)| id <= s_id && fil == filter)
|
.find(|meta| meta.id <= s_id && meta.filter == filter)
|
||||||
.map(|(id, _)| *id);
|
.map(|meta| meta.id);
|
||||||
if let Some(s) = scop {
|
if let Some(s) = scop {
|
||||||
self.handle_error(s, err);
|
self.handle_error(s, err);
|
||||||
} else {
|
} else {
|
||||||
|
@ -237,14 +244,19 @@ impl GPUDevice {
|
||||||
};
|
};
|
||||||
if remove {
|
if remove {
|
||||||
let _ = context.error_scopes.remove(&scope);
|
let _ = context.error_scopes.remove(&scope);
|
||||||
context.scope_stack.retain(|(id, _)| *id != scope);
|
context.scope_stack.retain(|meta| meta.id != scope);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn use_current_scope(&self) -> Option<ErrorScopeId> {
|
pub fn use_current_scope(&self) -> Option<ErrorScopeId> {
|
||||||
let mut context = self.scope_context.borrow_mut();
|
let mut context = self.scope_context.borrow_mut();
|
||||||
let scope_id = context.scope_stack.last().copied();
|
let scope_id = context
|
||||||
scope_id.and_then(|(s_id, _)| {
|
.scope_stack
|
||||||
|
.iter()
|
||||||
|
.rev()
|
||||||
|
.find(|meta| !meta.popped.get())
|
||||||
|
.map(|meta| meta.id);
|
||||||
|
scope_id.and_then(|s_id| {
|
||||||
context.error_scopes.get_mut(&s_id).map(|mut scope| {
|
context.error_scopes.get_mut(&s_id).map(|mut scope| {
|
||||||
scope.op_count += 1;
|
scope.op_count += 1;
|
||||||
s_id
|
s_id
|
||||||
|
@ -293,15 +305,12 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
|
|
||||||
/// https://gpuweb.github.io/gpuweb/#dom-gpudevice-createbuffer
|
/// https://gpuweb.github.io/gpuweb/#dom-gpudevice-createbuffer
|
||||||
fn CreateBuffer(&self, descriptor: &GPUBufferDescriptor) -> DomRoot<GPUBuffer> {
|
fn CreateBuffer(&self, descriptor: &GPUBufferDescriptor) -> DomRoot<GPUBuffer> {
|
||||||
let wgpu_descriptor = wgt::BufferDescriptor {
|
let desc = wgt::BufferUsage::from_bits(descriptor.usage).map(|usg| wgt::BufferDescriptor {
|
||||||
label: descriptor.parent.label.as_ref().map(|s| s.to_string()),
|
label: descriptor.parent.label.as_ref().map(|s| s.to_string()),
|
||||||
size: descriptor.size,
|
size: descriptor.size,
|
||||||
usage: match wgt::BufferUsage::from_bits(descriptor.usage) {
|
usage: usg,
|
||||||
Some(u) => u,
|
|
||||||
None => wgt::BufferUsage::empty(),
|
|
||||||
},
|
|
||||||
mapped_at_creation: descriptor.mappedAtCreation,
|
mapped_at_creation: descriptor.mappedAtCreation,
|
||||||
};
|
});
|
||||||
let id = self
|
let id = self
|
||||||
.global()
|
.global()
|
||||||
.wgpu_id_hub()
|
.wgpu_id_hub()
|
||||||
|
@ -309,6 +318,13 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
.create_buffer_id(self.device.0.backend());
|
.create_buffer_id(self.device.0.backend());
|
||||||
|
|
||||||
let scope_id = self.use_current_scope();
|
let scope_id = self.use_current_scope();
|
||||||
|
if desc.is_none() {
|
||||||
|
self.handle_server_msg(
|
||||||
|
scope_id,
|
||||||
|
WebGPUOpResult::ValidationError(String::from("Invalid GPUBufferUsage")),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
self.channel
|
self.channel
|
||||||
.0
|
.0
|
||||||
.send((
|
.send((
|
||||||
|
@ -316,7 +332,7 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
WebGPURequest::CreateBuffer {
|
WebGPURequest::CreateBuffer {
|
||||||
device_id: self.device.0,
|
device_id: self.device.0,
|
||||||
buffer_id: id,
|
buffer_id: id,
|
||||||
descriptor: wgpu_descriptor,
|
descriptor: desc,
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
.expect("Failed to create WebGPU buffer");
|
.expect("Failed to create WebGPU buffer");
|
||||||
|
@ -357,13 +373,17 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
&self,
|
&self,
|
||||||
descriptor: &GPUBindGroupLayoutDescriptor,
|
descriptor: &GPUBindGroupLayoutDescriptor,
|
||||||
) -> DomRoot<GPUBindGroupLayout> {
|
) -> DomRoot<GPUBindGroupLayout> {
|
||||||
|
let mut valid = true;
|
||||||
let entries = descriptor
|
let entries = descriptor
|
||||||
.entries
|
.entries
|
||||||
.iter()
|
.iter()
|
||||||
.map(|bind| {
|
.map(|bind| {
|
||||||
let visibility = match wgt::ShaderStage::from_bits(bind.visibility) {
|
let visibility = match wgt::ShaderStage::from_bits(bind.visibility) {
|
||||||
Some(visibility) => visibility,
|
Some(visibility) => visibility,
|
||||||
None => wgt::ShaderStage::from_bits(0).unwrap(),
|
None => {
|
||||||
|
valid = false;
|
||||||
|
wgt::ShaderStage::empty()
|
||||||
|
},
|
||||||
};
|
};
|
||||||
let ty = match bind.type_ {
|
let ty = match bind.type_ {
|
||||||
GPUBindingType::Uniform_buffer => wgt::BindingType::UniformBuffer {
|
GPUBindingType::Uniform_buffer => wgt::BindingType::UniformBuffer {
|
||||||
|
@ -435,13 +455,21 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
|
|
||||||
let scope_id = self.use_current_scope();
|
let scope_id = self.use_current_scope();
|
||||||
|
|
||||||
let desc = wgt::BindGroupLayoutDescriptor {
|
let desc = if valid {
|
||||||
|
Some(wgt::BindGroupLayoutDescriptor {
|
||||||
label: descriptor
|
label: descriptor
|
||||||
.parent
|
.parent
|
||||||
.label
|
.label
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(|s| Cow::Owned(s.to_string())),
|
.map(|s| Cow::Owned(s.to_string())),
|
||||||
entries: Cow::Owned(entries),
|
entries: Cow::Owned(entries),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
self.handle_server_msg(
|
||||||
|
scope_id,
|
||||||
|
WebGPUOpResult::ValidationError(String::from("Invalid GPUShaderStage")),
|
||||||
|
);
|
||||||
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let bind_group_layout_id = self
|
let bind_group_layout_id = self
|
||||||
|
@ -695,7 +723,8 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
/// https://gpuweb.github.io/gpuweb/#dom-gpudevice-createtexture
|
/// https://gpuweb.github.io/gpuweb/#dom-gpudevice-createtexture
|
||||||
fn CreateTexture(&self, descriptor: &GPUTextureDescriptor) -> DomRoot<GPUTexture> {
|
fn CreateTexture(&self, descriptor: &GPUTextureDescriptor) -> DomRoot<GPUTexture> {
|
||||||
let size = convert_texture_size_to_dict(&descriptor.size);
|
let size = convert_texture_size_to_dict(&descriptor.size);
|
||||||
let desc = wgt::TextureDescriptor {
|
let desc =
|
||||||
|
wgt::TextureUsage::from_bits(descriptor.usage).map(|usg| wgt::TextureDescriptor {
|
||||||
label: descriptor.parent.label.as_ref().map(|s| s.to_string()),
|
label: descriptor.parent.label.as_ref().map(|s| s.to_string()),
|
||||||
size: convert_texture_size_to_wgt(&size),
|
size: convert_texture_size_to_wgt(&size),
|
||||||
mip_level_count: descriptor.mipLevelCount,
|
mip_level_count: descriptor.mipLevelCount,
|
||||||
|
@ -706,11 +735,8 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
GPUTextureDimension::_3d => wgt::TextureDimension::D3,
|
GPUTextureDimension::_3d => wgt::TextureDimension::D3,
|
||||||
},
|
},
|
||||||
format: convert_texture_format(descriptor.format),
|
format: convert_texture_format(descriptor.format),
|
||||||
usage: match wgt::TextureUsage::from_bits(descriptor.usage) {
|
usage: usg,
|
||||||
Some(t) => t,
|
});
|
||||||
None => wgt::TextureUsage::empty(),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
let texture_id = self
|
let texture_id = self
|
||||||
.global()
|
.global()
|
||||||
|
@ -719,7 +745,12 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
.create_texture_id(self.device.0.backend());
|
.create_texture_id(self.device.0.backend());
|
||||||
|
|
||||||
let scope_id = self.use_current_scope();
|
let scope_id = self.use_current_scope();
|
||||||
|
if desc.is_none() {
|
||||||
|
self.handle_server_msg(
|
||||||
|
scope_id,
|
||||||
|
WebGPUOpResult::ValidationError(String::from("Invalid GPUTextureUsage")),
|
||||||
|
);
|
||||||
|
}
|
||||||
self.channel
|
self.channel
|
||||||
.0
|
.0
|
||||||
.send((
|
.send((
|
||||||
|
@ -803,8 +834,29 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
) -> DomRoot<GPURenderPipeline> {
|
) -> DomRoot<GPURenderPipeline> {
|
||||||
let ref rs_desc = descriptor.rasterizationState;
|
let ref rs_desc = descriptor.rasterizationState;
|
||||||
let ref vs_desc = descriptor.vertexState;
|
let ref vs_desc = descriptor.vertexState;
|
||||||
|
let scope_id = self.use_current_scope();
|
||||||
|
let mut valid = true;
|
||||||
|
let color_states = Cow::Owned(
|
||||||
|
descriptor
|
||||||
|
.colorStates
|
||||||
|
.iter()
|
||||||
|
.map(|state| wgt::ColorStateDescriptor {
|
||||||
|
format: convert_texture_format(state.format),
|
||||||
|
alpha_blend: convert_blend_descriptor(&state.alphaBlend),
|
||||||
|
color_blend: convert_blend_descriptor(&state.colorBlend),
|
||||||
|
write_mask: match wgt::ColorWrite::from_bits(state.writeMask) {
|
||||||
|
Some(mask) => mask,
|
||||||
|
None => {
|
||||||
|
valid = false;
|
||||||
|
wgt::ColorWrite::empty()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>(),
|
||||||
|
);
|
||||||
|
|
||||||
let desc = wgpu_pipe::RenderPipelineDescriptor {
|
let desc = if valid {
|
||||||
|
Some(wgpu_pipe::RenderPipelineDescriptor {
|
||||||
layout: descriptor.parent.layout.id().0,
|
layout: descriptor.parent.layout.id().0,
|
||||||
vertex_stage: wgpu_pipe::ProgrammableStageDescriptor {
|
vertex_stage: wgpu_pipe::ProgrammableStageDescriptor {
|
||||||
module: descriptor.vertexStage.module.id().0,
|
module: descriptor.vertexStage.module.id().0,
|
||||||
|
@ -838,21 +890,7 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
GPUPrimitiveTopology::Triangle_list => wgt::PrimitiveTopology::TriangleList,
|
GPUPrimitiveTopology::Triangle_list => wgt::PrimitiveTopology::TriangleList,
|
||||||
GPUPrimitiveTopology::Triangle_strip => wgt::PrimitiveTopology::TriangleStrip,
|
GPUPrimitiveTopology::Triangle_strip => wgt::PrimitiveTopology::TriangleStrip,
|
||||||
},
|
},
|
||||||
color_states: Cow::Owned(
|
color_states,
|
||||||
descriptor
|
|
||||||
.colorStates
|
|
||||||
.iter()
|
|
||||||
.map(|state| wgt::ColorStateDescriptor {
|
|
||||||
format: convert_texture_format(state.format),
|
|
||||||
alpha_blend: convert_blend_descriptor(&state.alphaBlend),
|
|
||||||
color_blend: convert_blend_descriptor(&state.colorBlend),
|
|
||||||
write_mask: match wgt::ColorWrite::from_bits(state.writeMask) {
|
|
||||||
Some(mask) => mask,
|
|
||||||
None => wgt::ColorWrite::empty(),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>(),
|
|
||||||
),
|
|
||||||
depth_stencil_state: descriptor.depthStencilState.as_ref().map(|dss_desc| {
|
depth_stencil_state: descriptor.depthStencilState.as_ref().map(|dss_desc| {
|
||||||
wgt::DepthStencilStateDescriptor {
|
wgt::DepthStencilStateDescriptor {
|
||||||
format: convert_texture_format(dss_desc.format),
|
format: convert_texture_format(dss_desc.format),
|
||||||
|
@ -907,6 +945,13 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
sample_count: descriptor.sampleCount,
|
sample_count: descriptor.sampleCount,
|
||||||
sample_mask: descriptor.sampleMask,
|
sample_mask: descriptor.sampleMask,
|
||||||
alpha_to_coverage_enabled: descriptor.alphaToCoverageEnabled,
|
alpha_to_coverage_enabled: descriptor.alphaToCoverageEnabled,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
self.handle_server_msg(
|
||||||
|
scope_id,
|
||||||
|
WebGPUOpResult::ValidationError(String::from("Invalid GPUColorWriteFlags")),
|
||||||
|
);
|
||||||
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let render_pipeline_id = self
|
let render_pipeline_id = self
|
||||||
|
@ -915,8 +960,6 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
.lock()
|
.lock()
|
||||||
.create_render_pipeline_id(self.device.0.backend());
|
.create_render_pipeline_id(self.device.0.backend());
|
||||||
|
|
||||||
let scope_id = self.use_current_scope();
|
|
||||||
|
|
||||||
self.channel
|
self.channel
|
||||||
.0
|
.0
|
||||||
.send((
|
.send((
|
||||||
|
@ -986,7 +1029,11 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
promise: None,
|
promise: None,
|
||||||
};
|
};
|
||||||
let res = context.error_scopes.insert(scope_id, err_scope);
|
let res = context.error_scopes.insert(scope_id, err_scope);
|
||||||
context.scope_stack.push((scope_id, filter));
|
context.scope_stack.push(ErrorScopeMetadata {
|
||||||
|
id: scope_id,
|
||||||
|
filter,
|
||||||
|
popped: Cell::new(false),
|
||||||
|
});
|
||||||
assert!(res.is_none());
|
assert!(res.is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -994,8 +1041,10 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
fn PopErrorScope(&self, comp: InRealm) -> Rc<Promise> {
|
fn PopErrorScope(&self, comp: InRealm) -> Rc<Promise> {
|
||||||
let mut context = self.scope_context.borrow_mut();
|
let mut context = self.scope_context.borrow_mut();
|
||||||
let promise = Promise::new_in_current_realm(&self.global(), comp);
|
let promise = Promise::new_in_current_realm(&self.global(), comp);
|
||||||
let scope_id = if let Some((e, _)) = context.scope_stack.last() {
|
let scope_id =
|
||||||
*e
|
if let Some(meta) = context.scope_stack.iter().rev().find(|m| !m.popped.get()) {
|
||||||
|
meta.popped.set(true);
|
||||||
|
meta.id
|
||||||
} else {
|
} else {
|
||||||
promise.reject_error(Error::Operation);
|
promise.reject_error(Error::Operation);
|
||||||
return promise;
|
return promise;
|
||||||
|
@ -1017,7 +1066,7 @@ impl GPUDeviceMethods for GPUDevice {
|
||||||
};
|
};
|
||||||
if remove {
|
if remove {
|
||||||
let _ = context.error_scopes.remove(&scope_id);
|
let _ = context.error_scopes.remove(&scope_id);
|
||||||
let _ = context.scope_stack.pop();
|
context.scope_stack.retain(|meta| meta.id != scope_id);
|
||||||
}
|
}
|
||||||
promise
|
promise
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ pub struct GPURenderPassEncoder {
|
||||||
impl GPURenderPassEncoder {
|
impl GPURenderPassEncoder {
|
||||||
fn new_inherited(
|
fn new_inherited(
|
||||||
channel: WebGPU,
|
channel: WebGPU,
|
||||||
render_pass: RenderPass,
|
render_pass: Option<RenderPass>,
|
||||||
parent: &GPUCommandEncoder,
|
parent: &GPUCommandEncoder,
|
||||||
label: Option<USVString>,
|
label: Option<USVString>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
|
@ -43,7 +43,7 @@ impl GPURenderPassEncoder {
|
||||||
channel,
|
channel,
|
||||||
reflector_: Reflector::new(),
|
reflector_: Reflector::new(),
|
||||||
label: DomRefCell::new(label),
|
label: DomRefCell::new(label),
|
||||||
render_pass: DomRefCell::new(Some(render_pass)),
|
render_pass: DomRefCell::new(render_pass),
|
||||||
command_encoder: Dom::from_ref(parent),
|
command_encoder: Dom::from_ref(parent),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ impl GPURenderPassEncoder {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
global: &GlobalScope,
|
global: &GlobalScope,
|
||||||
channel: WebGPU,
|
channel: WebGPU,
|
||||||
render_pass: RenderPass,
|
render_pass: Option<RenderPass>,
|
||||||
parent: &GPUCommandEncoder,
|
parent: &GPUCommandEncoder,
|
||||||
label: Option<USVString>,
|
label: Option<USVString>,
|
||||||
) -> DomRoot<Self> {
|
) -> DomRoot<Self> {
|
||||||
|
@ -126,6 +126,7 @@ impl GPURenderPassEncoderMethods for GPURenderPassEncoder {
|
||||||
|
|
||||||
/// https://gpuweb.github.io/gpuweb/#dom-gpurenderpassencoder-setblendcolor
|
/// https://gpuweb.github.io/gpuweb/#dom-gpurenderpassencoder-setblendcolor
|
||||||
fn SetBlendColor(&self, color: GPUColor) {
|
fn SetBlendColor(&self, color: GPUColor) {
|
||||||
|
if let Some(render_pass) = self.render_pass.borrow_mut().as_mut() {
|
||||||
let colors = match color {
|
let colors = match color {
|
||||||
GPUColor::GPUColorDict(d) => wgt::Color {
|
GPUColor::GPUColorDict(d) => wgt::Color {
|
||||||
r: *d.r,
|
r: *d.r,
|
||||||
|
@ -146,7 +147,6 @@ impl GPURenderPassEncoderMethods for GPURenderPassEncoder {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
if let Some(render_pass) = self.render_pass.borrow_mut().as_mut() {
|
|
||||||
wgpu_render::wgpu_render_pass_set_blend_color(render_pass, &colors);
|
wgpu_render::wgpu_render_pass_set_blend_color(render_pass, &colors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ impl GPURenderPassEncoderMethods for GPURenderPassEncoder {
|
||||||
|
|
||||||
/// https://gpuweb.github.io/gpuweb/#dom-gpurenderpassencoder-endpass
|
/// https://gpuweb.github.io/gpuweb/#dom-gpurenderpassencoder-endpass
|
||||||
fn EndPass(&self) {
|
fn EndPass(&self) {
|
||||||
if let Some(render_pass) = self.render_pass.borrow_mut().take() {
|
let render_pass = self.render_pass.borrow_mut().take();
|
||||||
self.channel
|
self.channel
|
||||||
.0
|
.0
|
||||||
.send((
|
.send((
|
||||||
|
@ -178,7 +178,6 @@ impl GPURenderPassEncoderMethods for GPURenderPassEncoder {
|
||||||
GPUCommandEncoderState::EncodingRenderPass,
|
GPUCommandEncoderState::EncodingRenderPass,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// https://gpuweb.github.io/gpuweb/#dom-gpurenderencoderbase-setpipeline
|
/// https://gpuweb.github.io/gpuweb/#dom-gpurenderencoderbase-setpipeline
|
||||||
fn SetPipeline(&self, pipeline: &GPURenderPipeline) {
|
fn SetPipeline(&self, pipeline: &GPURenderPipeline) {
|
||||||
|
|
|
@ -16,8 +16,11 @@ use crate::dom::globalscope::GlobalScope;
|
||||||
use crate::dom::gpudevice::{convert_texture_format, convert_texture_view_dimension, GPUDevice};
|
use crate::dom::gpudevice::{convert_texture_format, convert_texture_view_dimension, GPUDevice};
|
||||||
use crate::dom::gputextureview::GPUTextureView;
|
use crate::dom::gputextureview::GPUTextureView;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
|
use std::num::NonZeroU32;
|
||||||
use std::string::String;
|
use std::string::String;
|
||||||
use webgpu::{wgt, WebGPU, WebGPURequest, WebGPUTexture, WebGPUTextureView};
|
use webgpu::{
|
||||||
|
identity::WebGPUOpResult, wgt, WebGPU, WebGPURequest, WebGPUTexture, WebGPUTextureView,
|
||||||
|
};
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct GPUTexture {
|
pub struct GPUTexture {
|
||||||
|
@ -137,8 +140,23 @@ impl GPUTextureMethods for GPUTexture {
|
||||||
};
|
};
|
||||||
|
|
||||||
let format = descriptor.format.unwrap_or(self.format);
|
let format = descriptor.format.unwrap_or(self.format);
|
||||||
|
let scope_id = self.device.use_current_scope();
|
||||||
|
let mut valid = true;
|
||||||
|
let level_count = descriptor.mipLevelCount.and_then(|count| {
|
||||||
|
if count == 0 {
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
NonZeroU32::new(count)
|
||||||
|
});
|
||||||
|
let array_layer_count = descriptor.arrayLayerCount.and_then(|count| {
|
||||||
|
if count == 0 {
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
NonZeroU32::new(count)
|
||||||
|
});
|
||||||
|
|
||||||
let desc = wgt::TextureViewDescriptor {
|
let desc = if valid {
|
||||||
|
Some(wgt::TextureViewDescriptor {
|
||||||
label: descriptor
|
label: descriptor
|
||||||
.parent
|
.parent
|
||||||
.label
|
.label
|
||||||
|
@ -152,9 +170,18 @@ impl GPUTextureMethods for GPUTexture {
|
||||||
GPUTextureAspect::Depth_only => wgt::TextureAspect::DepthOnly,
|
GPUTextureAspect::Depth_only => wgt::TextureAspect::DepthOnly,
|
||||||
},
|
},
|
||||||
base_mip_level: descriptor.baseMipLevel,
|
base_mip_level: descriptor.baseMipLevel,
|
||||||
level_count: descriptor.mipLevelCount.as_ref().copied(),
|
level_count,
|
||||||
base_array_layer: descriptor.baseArrayLayer,
|
base_array_layer: descriptor.baseArrayLayer,
|
||||||
array_layer_count: descriptor.arrayLayerCount.as_ref().copied(),
|
array_layer_count,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
self.device.handle_server_msg(
|
||||||
|
scope_id,
|
||||||
|
WebGPUOpResult::ValidationError(String::from(
|
||||||
|
"arrayLayerCount and mipLevelCount cannot be 0",
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let texture_view_id = self
|
let texture_view_id = self
|
||||||
|
@ -163,8 +190,6 @@ impl GPUTextureMethods for GPUTexture {
|
||||||
.lock()
|
.lock()
|
||||||
.create_texture_view_id(self.device.id().0.backend());
|
.create_texture_view_id(self.device.id().0.backend());
|
||||||
|
|
||||||
let scope_id = self.device.use_current_scope();
|
|
||||||
|
|
||||||
self.channel
|
self.channel
|
||||||
.0
|
.0
|
||||||
.send((
|
.send((
|
||||||
|
|
|
@ -20,7 +20,7 @@ use serde::{Deserialize, Serialize};
|
||||||
use servo_config::pref;
|
use servo_config::pref;
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::collections::HashMap;
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::num::NonZeroU64;
|
use std::num::NonZeroU64;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
@ -77,6 +77,7 @@ pub enum WebGPURequest {
|
||||||
CommandEncoderFinish {
|
CommandEncoderFinish {
|
||||||
command_encoder_id: id::CommandEncoderId,
|
command_encoder_id: id::CommandEncoderId,
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
|
is_error: bool,
|
||||||
// TODO(zakorgy): Serialize CommandBufferDescriptor in wgpu-core
|
// TODO(zakorgy): Serialize CommandBufferDescriptor in wgpu-core
|
||||||
// wgpu::command::CommandBufferDescriptor,
|
// wgpu::command::CommandBufferDescriptor,
|
||||||
},
|
},
|
||||||
|
@ -118,12 +119,12 @@ pub enum WebGPURequest {
|
||||||
CreateBindGroupLayout {
|
CreateBindGroupLayout {
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
bind_group_layout_id: id::BindGroupLayoutId,
|
bind_group_layout_id: id::BindGroupLayoutId,
|
||||||
descriptor: wgt::BindGroupLayoutDescriptor<'static>,
|
descriptor: Option<wgt::BindGroupLayoutDescriptor<'static>>,
|
||||||
},
|
},
|
||||||
CreateBuffer {
|
CreateBuffer {
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
buffer_id: id::BufferId,
|
buffer_id: id::BufferId,
|
||||||
descriptor: wgt::BufferDescriptor<Option<String>>,
|
descriptor: Option<wgt::BufferDescriptor<Option<String>>>,
|
||||||
},
|
},
|
||||||
CreateCommandEncoder {
|
CreateCommandEncoder {
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
|
@ -146,7 +147,7 @@ pub enum WebGPURequest {
|
||||||
CreateRenderPipeline {
|
CreateRenderPipeline {
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
render_pipeline_id: id::RenderPipelineId,
|
render_pipeline_id: id::RenderPipelineId,
|
||||||
descriptor: RenderPipelineDescriptor<'static>,
|
descriptor: Option<RenderPipelineDescriptor<'static>>,
|
||||||
},
|
},
|
||||||
CreateSampler {
|
CreateSampler {
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
|
@ -169,13 +170,13 @@ pub enum WebGPURequest {
|
||||||
CreateTexture {
|
CreateTexture {
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
texture_id: id::TextureId,
|
texture_id: id::TextureId,
|
||||||
descriptor: wgt::TextureDescriptor<Option<String>>,
|
descriptor: Option<wgt::TextureDescriptor<Option<String>>>,
|
||||||
},
|
},
|
||||||
CreateTextureView {
|
CreateTextureView {
|
||||||
texture_id: id::TextureId,
|
texture_id: id::TextureId,
|
||||||
texture_view_id: id::TextureViewId,
|
texture_view_id: id::TextureViewId,
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
descriptor: wgt::TextureViewDescriptor<Option<String>>,
|
descriptor: Option<wgt::TextureViewDescriptor<Option<String>>>,
|
||||||
},
|
},
|
||||||
DestroyBuffer(id::BufferId),
|
DestroyBuffer(id::BufferId),
|
||||||
DestroySwapChain {
|
DestroySwapChain {
|
||||||
|
@ -207,12 +208,12 @@ pub enum WebGPURequest {
|
||||||
RunComputePass {
|
RunComputePass {
|
||||||
command_encoder_id: id::CommandEncoderId,
|
command_encoder_id: id::CommandEncoderId,
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
compute_pass: ComputePass,
|
compute_pass: Option<ComputePass>,
|
||||||
},
|
},
|
||||||
RunRenderPass {
|
RunRenderPass {
|
||||||
command_encoder_id: id::CommandEncoderId,
|
command_encoder_id: id::CommandEncoderId,
|
||||||
device_id: id::DeviceId,
|
device_id: id::DeviceId,
|
||||||
render_pass: RenderPass,
|
render_pass: Option<RenderPass>,
|
||||||
},
|
},
|
||||||
Submit {
|
Submit {
|
||||||
queue_id: id::QueueId,
|
queue_id: id::QueueId,
|
||||||
|
@ -337,6 +338,8 @@ struct WGPU<'a> {
|
||||||
// Presentation Buffers with pending mapping
|
// Presentation Buffers with pending mapping
|
||||||
present_buffer_maps:
|
present_buffer_maps:
|
||||||
HashMap<id::BufferId, Rc<BufferMapInfo<'a, (Option<ErrorScopeId>, WebGPURequest)>>>,
|
HashMap<id::BufferId, Rc<BufferMapInfo<'a, (Option<ErrorScopeId>, WebGPURequest)>>>,
|
||||||
|
//TODO: Remove this (https://github.com/gfx-rs/wgpu/issues/867)
|
||||||
|
error_command_buffers: HashSet<id::CommandBufferId>,
|
||||||
webrender_api: webrender_api::RenderApi,
|
webrender_api: webrender_api::RenderApi,
|
||||||
webrender_document: webrender_api::DocumentId,
|
webrender_document: webrender_api::DocumentId,
|
||||||
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
|
external_images: Arc<Mutex<WebrenderExternalImageRegistry>>,
|
||||||
|
@ -368,6 +371,7 @@ impl<'a> WGPU<'a> {
|
||||||
_invalid_adapters: Vec::new(),
|
_invalid_adapters: Vec::new(),
|
||||||
buffer_maps: HashMap::new(),
|
buffer_maps: HashMap::new(),
|
||||||
present_buffer_maps: HashMap::new(),
|
present_buffer_maps: HashMap::new(),
|
||||||
|
error_command_buffers: HashSet::new(),
|
||||||
webrender_api: webrender_api_sender.create_api(),
|
webrender_api: webrender_api_sender.create_api(),
|
||||||
webrender_document,
|
webrender_document,
|
||||||
external_images,
|
external_images,
|
||||||
|
@ -450,12 +454,21 @@ impl<'a> WGPU<'a> {
|
||||||
WebGPURequest::CommandEncoderFinish {
|
WebGPURequest::CommandEncoderFinish {
|
||||||
command_encoder_id,
|
command_encoder_id,
|
||||||
device_id,
|
device_id,
|
||||||
|
is_error,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
let result = gfx_select!(command_encoder_id => global.command_encoder_finish(
|
let result = if is_error {
|
||||||
|
Err(String::from("Invalid GPUCommandEncoder"))
|
||||||
|
} else {
|
||||||
|
gfx_select!(command_encoder_id => global.command_encoder_finish(
|
||||||
command_encoder_id,
|
command_encoder_id,
|
||||||
&wgt::CommandBufferDescriptor::default()
|
&wgt::CommandBufferDescriptor::default()
|
||||||
));
|
))
|
||||||
|
.map_err(|e| format!("{:?}", e))
|
||||||
|
};
|
||||||
|
if result.is_err() {
|
||||||
|
self.error_command_buffers.insert(command_encoder_id);
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::CopyBufferToBuffer {
|
WebGPURequest::CopyBufferToBuffer {
|
||||||
|
@ -534,6 +547,9 @@ impl<'a> WGPU<'a> {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
let result = gfx_select!(bind_group_id =>
|
let result = gfx_select!(bind_group_id =>
|
||||||
global.device_create_bind_group(device_id, &descriptor, bind_group_id));
|
global.device_create_bind_group(device_id, &descriptor, bind_group_id));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(bind_group_id => global.bind_group_error(bind_group_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateBindGroupLayout {
|
WebGPURequest::CreateBindGroupLayout {
|
||||||
|
@ -542,9 +558,18 @@ impl<'a> WGPU<'a> {
|
||||||
descriptor,
|
descriptor,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
|
if let Some(desc) = descriptor {
|
||||||
let result = gfx_select!(bind_group_layout_id =>
|
let result = gfx_select!(bind_group_layout_id =>
|
||||||
global.device_create_bind_group_layout(device_id, &descriptor, bind_group_layout_id));
|
global.device_create_bind_group_layout(device_id, &desc, bind_group_layout_id));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(bind_group_layout_id =>
|
||||||
|
global.bind_group_layout_error(bind_group_layout_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
|
} else {
|
||||||
|
let _ = gfx_select!(bind_group_layout_id =>
|
||||||
|
global.bind_group_layout_error(bind_group_layout_id));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateBuffer {
|
WebGPURequest::CreateBuffer {
|
||||||
device_id,
|
device_id,
|
||||||
|
@ -552,8 +577,9 @@ impl<'a> WGPU<'a> {
|
||||||
descriptor,
|
descriptor,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
|
if let Some(desc) = descriptor {
|
||||||
let st;
|
let st;
|
||||||
let label = match descriptor.label {
|
let label = match desc.label {
|
||||||
Some(ref s) => {
|
Some(ref s) => {
|
||||||
st = CString::new(s.as_bytes()).unwrap();
|
st = CString::new(s.as_bytes()).unwrap();
|
||||||
st.as_ptr()
|
st.as_ptr()
|
||||||
|
@ -561,8 +587,14 @@ impl<'a> WGPU<'a> {
|
||||||
None => ptr::null(),
|
None => ptr::null(),
|
||||||
};
|
};
|
||||||
let result = gfx_select!(buffer_id =>
|
let result = gfx_select!(buffer_id =>
|
||||||
global.device_create_buffer(device_id, &descriptor.map_label(|_| label), buffer_id));
|
global.device_create_buffer(device_id, &desc.map_label(|_| label), buffer_id));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(buffer_id => global.buffer_error(buffer_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
|
} else {
|
||||||
|
let _ = gfx_select!(buffer_id => global.buffer_error(buffer_id));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateCommandEncoder {
|
WebGPURequest::CreateCommandEncoder {
|
||||||
device_id,
|
device_id,
|
||||||
|
@ -581,6 +613,9 @@ impl<'a> WGPU<'a> {
|
||||||
let desc = wgt::CommandEncoderDescriptor { label };
|
let desc = wgt::CommandEncoderDescriptor { label };
|
||||||
let result = gfx_select!(command_encoder_id =>
|
let result = gfx_select!(command_encoder_id =>
|
||||||
global.device_create_command_encoder(device_id, &desc, command_encoder_id));
|
global.device_create_command_encoder(device_id, &desc, command_encoder_id));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(command_encoder_id => global.command_encoder_error(command_encoder_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateComputePipeline {
|
WebGPURequest::CreateComputePipeline {
|
||||||
|
@ -591,6 +626,10 @@ impl<'a> WGPU<'a> {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
let result = gfx_select!(compute_pipeline_id =>
|
let result = gfx_select!(compute_pipeline_id =>
|
||||||
global.device_create_compute_pipeline(device_id, &descriptor, compute_pipeline_id));
|
global.device_create_compute_pipeline(device_id, &descriptor, compute_pipeline_id));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(compute_pipeline_id =>
|
||||||
|
global.compute_pipeline_error(compute_pipeline_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateContext(sender) => {
|
WebGPURequest::CreateContext(sender) => {
|
||||||
|
@ -611,18 +650,28 @@ impl<'a> WGPU<'a> {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
let result = gfx_select!(pipeline_layout_id =>
|
let result = gfx_select!(pipeline_layout_id =>
|
||||||
global.device_create_pipeline_layout(device_id, &descriptor, pipeline_layout_id));
|
global.device_create_pipeline_layout(device_id, &descriptor, pipeline_layout_id));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(pipeline_layout_id => global.pipeline_layout_error(pipeline_layout_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
//TODO: consider https://github.com/gfx-rs/wgpu/issues/684
|
|
||||||
WebGPURequest::CreateRenderPipeline {
|
WebGPURequest::CreateRenderPipeline {
|
||||||
device_id,
|
device_id,
|
||||||
render_pipeline_id,
|
render_pipeline_id,
|
||||||
descriptor,
|
descriptor,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
|
if let Some(desc) = descriptor {
|
||||||
let result = gfx_select!(render_pipeline_id =>
|
let result = gfx_select!(render_pipeline_id =>
|
||||||
global.device_create_render_pipeline(device_id, &descriptor, render_pipeline_id));
|
global.device_create_render_pipeline(device_id, &desc, render_pipeline_id));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(render_pipeline_id =>
|
||||||
|
global.render_pipeline_error(render_pipeline_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
|
} else {
|
||||||
|
let _ = gfx_select!(render_pipeline_id => global.render_pipeline_error(render_pipeline_id));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateSampler {
|
WebGPURequest::CreateSampler {
|
||||||
device_id,
|
device_id,
|
||||||
|
@ -643,6 +692,9 @@ impl<'a> WGPU<'a> {
|
||||||
&descriptor.map_label(|_| label),
|
&descriptor.map_label(|_| label),
|
||||||
sampler_id
|
sampler_id
|
||||||
));
|
));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(sampler_id => global.sampler_error(sampler_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateShaderModule {
|
WebGPURequest::CreateShaderModule {
|
||||||
|
@ -655,6 +707,10 @@ impl<'a> WGPU<'a> {
|
||||||
wgpu_core::pipeline::ShaderModuleSource::SpirV(Cow::Owned(program));
|
wgpu_core::pipeline::ShaderModuleSource::SpirV(Cow::Owned(program));
|
||||||
let result = gfx_select!(program_id =>
|
let result = gfx_select!(program_id =>
|
||||||
global.device_create_shader_module(device_id, source, program_id));
|
global.device_create_shader_module(device_id, source, program_id));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ =
|
||||||
|
gfx_select!(program_id => global.shader_module_error(program_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateSwapChain {
|
WebGPURequest::CreateSwapChain {
|
||||||
|
@ -705,8 +761,9 @@ impl<'a> WGPU<'a> {
|
||||||
descriptor,
|
descriptor,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
|
if let Some(desc) = descriptor {
|
||||||
let st;
|
let st;
|
||||||
let label = match descriptor.label {
|
let label = match desc.label {
|
||||||
Some(ref s) => {
|
Some(ref s) => {
|
||||||
st = CString::new(s.as_bytes()).unwrap();
|
st = CString::new(s.as_bytes()).unwrap();
|
||||||
st.as_ptr()
|
st.as_ptr()
|
||||||
|
@ -715,10 +772,16 @@ impl<'a> WGPU<'a> {
|
||||||
};
|
};
|
||||||
let result = gfx_select!(texture_id => global.device_create_texture(
|
let result = gfx_select!(texture_id => global.device_create_texture(
|
||||||
device_id,
|
device_id,
|
||||||
&descriptor.map_label(|_| label),
|
&desc.map_label(|_| label),
|
||||||
texture_id
|
texture_id
|
||||||
));
|
));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(texture_id => global.texture_error(texture_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
|
} else {
|
||||||
|
let _ = gfx_select!(texture_id => global.texture_error(texture_id));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
WebGPURequest::CreateTextureView {
|
WebGPURequest::CreateTextureView {
|
||||||
texture_id,
|
texture_id,
|
||||||
|
@ -727,8 +790,9 @@ impl<'a> WGPU<'a> {
|
||||||
descriptor,
|
descriptor,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
|
if let Some(desc) = descriptor {
|
||||||
let st;
|
let st;
|
||||||
let label = match descriptor.label {
|
let label = match desc.label {
|
||||||
Some(ref s) => {
|
Some(ref s) => {
|
||||||
st = CString::new(s.as_bytes()).unwrap();
|
st = CString::new(s.as_bytes()).unwrap();
|
||||||
st.as_ptr()
|
st.as_ptr()
|
||||||
|
@ -737,14 +801,20 @@ impl<'a> WGPU<'a> {
|
||||||
};
|
};
|
||||||
let result = gfx_select!(texture_view_id => global.texture_create_view(
|
let result = gfx_select!(texture_view_id => global.texture_create_view(
|
||||||
texture_id,
|
texture_id,
|
||||||
Some(&descriptor.map_label(|_| label)),
|
Some(&desc.map_label(|_| label)),
|
||||||
texture_view_id
|
texture_view_id
|
||||||
));
|
));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(texture_view_id => global.texture_view_error(texture_view_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
|
} else {
|
||||||
|
let _ = gfx_select!(texture_view_id => global.texture_view_error(texture_view_id));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
WebGPURequest::DestroyBuffer(buffer) => {
|
WebGPURequest::DestroyBuffer(buffer) => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
gfx_select!(buffer => global.buffer_destroy(buffer, false));
|
gfx_select!(buffer => global.buffer_drop(buffer, false));
|
||||||
},
|
},
|
||||||
WebGPURequest::DestroySwapChain {
|
WebGPURequest::DestroySwapChain {
|
||||||
external_id,
|
external_id,
|
||||||
|
@ -758,10 +828,10 @@ impl<'a> WGPU<'a> {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
for b_id in data.available_buffer_ids.iter() {
|
for b_id in data.available_buffer_ids.iter() {
|
||||||
gfx_select!(b_id => global.buffer_destroy(*b_id, false));
|
gfx_select!(b_id => global.buffer_drop(*b_id, false));
|
||||||
}
|
}
|
||||||
for b_id in data.queued_buffer_ids.iter() {
|
for b_id in data.queued_buffer_ids.iter() {
|
||||||
gfx_select!(b_id => global.buffer_destroy(*b_id, false));
|
gfx_select!(b_id => global.buffer_drop(*b_id, false));
|
||||||
}
|
}
|
||||||
for b_id in data.unassigned_buffer_ids.iter() {
|
for b_id in data.unassigned_buffer_ids.iter() {
|
||||||
if let Err(e) = self.script_sender.send(WebGPUMsg::FreeBuffer(*b_id)) {
|
if let Err(e) = self.script_sender.send(WebGPUMsg::FreeBuffer(*b_id)) {
|
||||||
|
@ -775,7 +845,7 @@ impl<'a> WGPU<'a> {
|
||||||
},
|
},
|
||||||
WebGPURequest::DestroyTexture(texture) => {
|
WebGPURequest::DestroyTexture(texture) => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
gfx_select!(texture => global.texture_destroy(texture));
|
gfx_select!(texture => global.texture_drop(texture));
|
||||||
},
|
},
|
||||||
WebGPURequest::Exit(sender) => {
|
WebGPURequest::Exit(sender) => {
|
||||||
if let Err(e) = self.script_sender.send(WebGPUMsg::Exit) {
|
if let Err(e) = self.script_sender.send(WebGPUMsg::Exit) {
|
||||||
|
@ -816,6 +886,9 @@ impl<'a> WGPU<'a> {
|
||||||
&descriptor.map_label(|_| label),
|
&descriptor.map_label(|_| label),
|
||||||
render_bundle_id
|
render_bundle_id
|
||||||
));
|
));
|
||||||
|
if result.is_err() {
|
||||||
|
let _ = gfx_select!(render_bundle_id => global.render_bundle_error(render_bundle_id));
|
||||||
|
}
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::RequestAdapter {
|
WebGPURequest::RequestAdapter {
|
||||||
|
@ -823,15 +896,13 @@ impl<'a> WGPU<'a> {
|
||||||
options,
|
options,
|
||||||
ids,
|
ids,
|
||||||
} => {
|
} => {
|
||||||
let adapter_id = match self.global.pick_adapter(
|
let adapter_id = match self.global.request_adapter(
|
||||||
&options,
|
&options,
|
||||||
wgpu::instance::AdapterInputs::IdSet(&ids, |id| id.backend()),
|
wgpu::instance::AdapterInputs::IdSet(&ids, |id| id.backend()),
|
||||||
) {
|
) {
|
||||||
Some(id) => id,
|
Ok(id) => id,
|
||||||
None => {
|
Err(w) => {
|
||||||
if let Err(e) =
|
if let Err(e) = sender.send(Err(format!("{:?}", w))) {
|
||||||
sender.send(Err("Failed to get webgpu adapter".to_string()))
|
|
||||||
{
|
|
||||||
warn!(
|
warn!(
|
||||||
"Failed to send response to WebGPURequest::RequestAdapter ({})",
|
"Failed to send response to WebGPURequest::RequestAdapter ({})",
|
||||||
e
|
e
|
||||||
|
@ -843,7 +914,8 @@ impl<'a> WGPU<'a> {
|
||||||
let adapter = WebGPUAdapter(adapter_id);
|
let adapter = WebGPUAdapter(adapter_id);
|
||||||
self.adapters.push(adapter);
|
self.adapters.push(adapter);
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
let info = gfx_select!(adapter_id => global.adapter_get_info(adapter_id));
|
let info =
|
||||||
|
gfx_select!(adapter_id => global.adapter_get_info(adapter_id)).unwrap();
|
||||||
if let Err(e) = sender.send(Ok(WebGPUResponse::RequestAdapter {
|
if let Err(e) = sender.send(Ok(WebGPUResponse::RequestAdapter {
|
||||||
adapter_name: info.name,
|
adapter_name: info.name,
|
||||||
adapter_id: adapter,
|
adapter_id: adapter,
|
||||||
|
@ -872,6 +944,7 @@ impl<'a> WGPU<'a> {
|
||||||
)) {
|
)) {
|
||||||
Ok(id) => id,
|
Ok(id) => id,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
let _ = gfx_select!(device_id => global.device_error(device_id));
|
||||||
if let Err(w) = sender.send(Err(format!("{:?}", e))) {
|
if let Err(w) = sender.send(Err(format!("{:?}", e))) {
|
||||||
warn!(
|
warn!(
|
||||||
"Failed to send response to WebGPURequest::RequestDevice ({})",
|
"Failed to send response to WebGPURequest::RequestDevice ({})",
|
||||||
|
@ -904,10 +977,14 @@ impl<'a> WGPU<'a> {
|
||||||
compute_pass,
|
compute_pass,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
let result = gfx_select!(command_encoder_id => global.command_encoder_run_compute_pass(
|
let result = if let Some(pass) = compute_pass {
|
||||||
|
gfx_select!(command_encoder_id => global.command_encoder_run_compute_pass(
|
||||||
command_encoder_id,
|
command_encoder_id,
|
||||||
&compute_pass
|
&pass
|
||||||
));
|
)).map_err(|e| format!("{:?}", e))
|
||||||
|
} else {
|
||||||
|
Err(String::from("Invalid ComputePass"))
|
||||||
|
};
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::RunRenderPass {
|
WebGPURequest::RunRenderPass {
|
||||||
|
@ -916,10 +993,14 @@ impl<'a> WGPU<'a> {
|
||||||
render_pass,
|
render_pass,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
let result = gfx_select!(command_encoder_id => global.command_encoder_run_render_pass(
|
let result = if let Some(pass) = render_pass {
|
||||||
|
gfx_select!(command_encoder_id => global.command_encoder_run_render_pass(
|
||||||
command_encoder_id,
|
command_encoder_id,
|
||||||
&render_pass
|
&pass
|
||||||
));
|
)).map_err(|e| format!("{:?}", e))
|
||||||
|
} else {
|
||||||
|
Err(String::from("Invalid RenderPass"))
|
||||||
|
};
|
||||||
self.send_result(device_id, scope_id, result);
|
self.send_result(device_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::Submit {
|
WebGPURequest::Submit {
|
||||||
|
@ -927,7 +1008,15 @@ impl<'a> WGPU<'a> {
|
||||||
command_buffers,
|
command_buffers,
|
||||||
} => {
|
} => {
|
||||||
let global = &self.global;
|
let global = &self.global;
|
||||||
let result = gfx_select!(queue_id => global.queue_submit(queue_id, &command_buffers));
|
let cmd_id = command_buffers
|
||||||
|
.iter()
|
||||||
|
.find(|id| self.error_command_buffers.contains(id));
|
||||||
|
let result = if cmd_id.is_some() {
|
||||||
|
Err(String::from("Invalid command buffer submitted"))
|
||||||
|
} else {
|
||||||
|
gfx_select!(queue_id => global.queue_submit(queue_id, &command_buffers))
|
||||||
|
.map_err(|e| format!("{:?}", e))
|
||||||
|
};
|
||||||
self.send_result(queue_id, scope_id, result);
|
self.send_result(queue_id, scope_id, result);
|
||||||
},
|
},
|
||||||
WebGPURequest::SwapChainPresent {
|
WebGPURequest::SwapChainPresent {
|
||||||
|
|
|
@ -3890,15 +3890,6 @@
|
||||||
[webgpu:api,validation,error_scope:if_no_error_scope_handles_an_error_it_fires_an_uncapturederror_event:]
|
[webgpu:api,validation,error_scope:if_no_error_scope_handles_an_error_it_fires_an_uncapturederror_event:]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[webgpu:api,validation,error_scope:if_an_error_scope_matches_an_error_it_does_not_bubble_to_the_parent_scope:]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,error_scope:errors_bubble_to_the_parent_scope_if_not_handled_by_the_current_scope:]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,error_scope:simple_case_where_the_error_scope_catches_an_error:]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
||||||
[cts.html?q=webgpu:api,validation,createBindGroupLayout:*]
|
[cts.html?q=webgpu:api,validation,createBindGroupLayout:*]
|
||||||
expected: ERROR
|
expected: ERROR
|
||||||
|
@ -4692,7 +4683,6 @@
|
||||||
[cts.html?q=webgpu:api,validation,setBlendColor:*]
|
[cts.html?q=webgpu:api,validation,setBlendColor:*]
|
||||||
|
|
||||||
[cts.html?q=webgpu:api,validation,render_pass_descriptor:*]
|
[cts.html?q=webgpu:api,validation,render_pass_descriptor:*]
|
||||||
expected: CRASH
|
|
||||||
[webgpu:api,validation,render_pass_descriptor:check_the_use_of_multisampled_textures_as_color_attachments:]
|
[webgpu:api,validation,render_pass_descriptor:check_the_use_of_multisampled_textures_as_color_attachments:]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -4751,7 +4741,606 @@
|
||||||
expected: ERROR
|
expected: ERROR
|
||||||
|
|
||||||
[cts.html?q=webgpu:api,operation,resource_init,depth_stencil_attachment_clear:*]
|
[cts.html?q=webgpu:api,operation,resource_init,depth_stencil_attachment_clear:*]
|
||||||
expected: CRASH
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="all";mipLevelCount=1;sampleCount=1;uninitializeMethod="StoreOpClear";readMethod="DepthTest";dimension="2d";sliceCount=1;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=5;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="all";mipLevelCount=1;sampleCount=4;uninitializeMethod="Creation";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth32float";aspect="depth-only";mipLevelCount=1;sampleCount=1;uninitializeMethod="Creation";readMethod="DepthTest";dimension="2d";sliceCount=7;nonPowerOfTwo=false]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[webgpu:api,operation,resource_init,depth_stencil_attachment_clear:uninitialized_texture_is_zero:format="depth24plus-stencil8";aspect="stencil-only";mipLevelCount=1;sampleCount=4;uninitializeMethod="StoreOpClear";readMethod="StencilTest";dimension="2d";sliceCount=1;nonPowerOfTwo=true]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[cts.html?q=webgpu:api,operation,buffers,map_detach:*]
|
[cts.html?q=webgpu:api,operation,buffers,map_detach:*]
|
||||||
[webgpu:api,operation,buffers,map_detach:create_mapped:unmap=false;destroy=true]
|
[webgpu:api,operation,buffers,map_detach:create_mapped:unmap=false;destroy=true]
|
||||||
|
@ -15598,102 +16187,6 @@
|
||||||
[cts.html?q=webgpu:web-platform,canvas,context_creation:*]
|
[cts.html?q=webgpu:web-platform,canvas,context_creation:*]
|
||||||
|
|
||||||
[cts.html?q=webgpu:api,validation,setBindGroup:*]
|
[cts.html?q=webgpu:api,validation,setBindGroup:*]
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[0,4294967295\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[1024,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[0,4294967295\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[1,2\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[0,1024\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[0,512\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[4294967295,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[4294967295,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_passed_but_not_expected,compute_pass:type="renderpass"]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[256\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[0,512\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[1,2\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[0,4294967295\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[256,0,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[256,0,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[4294967295,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[0,512\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[0,1024\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[256\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[256,0,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[1,2\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[512,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[1024,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[512,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[1024,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_passed_but_not_expected,compute_pass:type="compute"]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="compute";dynamicOffsets=[512,0\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderpass";dynamicOffsets=[0,1024\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[webgpu:api,validation,setBindGroup:dynamic_offsets_match_expectations_in_pass_encoder:type="renderbundle";dynamicOffsets=[256\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
||||||
[cts.html?q=webgpu:api,operation,command_buffer,render,rendering:*]
|
[cts.html?q=webgpu:api,operation,command_buffer,render,rendering:*]
|
||||||
[webgpu:api,operation,command_buffer,render,rendering:fullscreen_quad:]
|
[webgpu:api,operation,command_buffer,render,rendering:fullscreen_quad:]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue