Skip to content

Commit 546c218

Browse files
SYNC POINT: resolve conflicts
2 parents 431f974 + c8a6787 commit 546c218

14 files changed

Lines changed: 234 additions & 63 deletions

File tree

cts_runner/test.lst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ webgpu:api,operation,vertex_state,correctness:setVertexBuffer_offset_and_attribu
3333
webgpu:api,validation,buffer,create:*
3434
webgpu:api,validation,buffer,destroy:*
3535
fails-if(dx12) webgpu:api,validation,capability_checks,limits,maxBindGroups:setBindGroup,*
36+
webgpu:api,validation,capability_checks,limits,maxInterStageShaderVariables:*
3637
webgpu:api,validation,createBindGroup:buffer_offset_and_size_for_bind_groups_match:*
3738
webgpu:api,validation,createBindGroup:buffer,effective_buffer_binding_size:*
3839
webgpu:api,validation,createBindGroup:buffer,resource_binding_size:*
@@ -135,6 +136,7 @@ webgpu:api,validation,render_pass,render_pass_descriptor:attachments,*
135136
webgpu:api,validation,render_pass,render_pass_descriptor:color_attachments,*
136137
webgpu:api,validation,render_pass,render_pass_descriptor:resolveTarget,*
137138
webgpu:api,validation,render_pass,resolve:resolve_attachment:*
139+
webgpu:api,validation,render_pipeline,inter_stage:max_shader_variable_location:*
138140
webgpu:api,validation,resource_usages,buffer,in_pass_encoder:*
139141
// FAIL: 2 other cases in resource_usages,texture,in_pass_encoder. https://github.com/gfx-rs/wgpu/issues/3126
140142
webgpu:api,validation,resource_usages,texture,in_pass_encoder:scope,*
@@ -177,6 +179,7 @@ webgpu:shader,execution,flow_control,return:*
177179
// Many other vertex_buffer_access subtests also passing, but there are too many to enumerate.
178180
// Fails on Metal in CI only, not when running locally.
179181
fails-if(metal) webgpu:shader,execution,robust_access_vertex:vertex_buffer_access:indexed=true;indirect=false;drawCallTestParameter="baseVertex";type="float32x4";additionalBuffers=4;partialLastNumber=false;offsetVertexBuffer=true
182+
webgpu:shader,execution,shader_io,vertex_builtins:outputs,clip_distances:*
180183
webgpu:shader,validation,const_assert,const_assert:*
181184
webgpu:shader,validation,expression,binary,short_circuiting_and_or:array_override:op="%26%26";a_val=1;b_val=1
182185
webgpu:shader,validation,expression,binary,short_circuiting_and_or:invalid_types:*

deno_webgpu/01_webgpu.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,7 @@ ObjectDefineProperty(GPUSupportedLimitsPrototype, privateCustomInspect, {
273273
"maxBufferSize",
274274
"maxVertexAttributes",
275275
"maxVertexBufferArrayStride",
276-
// TODO(@crowlKats): support max_inter_stage_shader_variables
277-
// "maxInterStageShaderVariables",
276+
"maxInterStageShaderVariables",
278277
"maxColorAttachments",
279278
"maxColorAttachmentBytesPerSample",
280279
"maxComputeWorkgroupStorageSize",

deno_webgpu/adapter.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,10 @@ impl GPUSupportedLimits {
339339
self.0.max_vertex_buffer_array_stride
340340
}
341341

342-
// TODO(@crowlKats): support max_inter_stage_shader_variables
342+
#[getter]
343+
fn maxInterStageShaderVariables(&self) -> u32 {
344+
self.0.max_inter_stage_shader_variables
345+
}
343346

344347
#[getter]
345348
fn maxColorAttachments(&self) -> u32 {

wgpu-core/src/device/resource.rs

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3743,10 +3743,10 @@ impl Device {
37433743
let final_entry_point_name;
37443744

37453745
{
3746-
let stage = wgt::ShaderStages::COMPUTE;
3746+
let stage = validation::ShaderStageForValidation::Compute;
37473747

37483748
final_entry_point_name = shader_module.finalize_entry_point_name(
3749-
stage,
3749+
stage.to_naga(),
37503750
desc.stage.entry_point.as_ref().map(|ep| ep.as_ref()),
37513751
)?;
37523752

@@ -3757,7 +3757,6 @@ impl Device {
37573757
&final_entry_point_name,
37583758
stage,
37593759
io,
3760-
None,
37613760
)?;
37623761
}
37633762
}
@@ -4230,17 +4229,23 @@ impl Device {
42304229
pipeline::RenderPipelineVertexProcessor::Vertex(ref vertex) => {
42314230
vertex_stage = {
42324231
let stage_desc = &vertex.stage;
4233-
let stage = wgt::ShaderStages::VERTEX;
4232+
let stage = validation::ShaderStageForValidation::Vertex {
4233+
topology: desc.primitive.topology,
4234+
compare_function: desc.depth_stencil.as_ref().map(|d| d.depth_compare),
4235+
};
4236+
let stage_bit = stage.to_wgt_bit();
42344237

42354238
let vertex_shader_module = &stage_desc.module;
42364239
vertex_shader_module.same_device(self)?;
42374240

4238-
let stage_err =
4239-
|error| pipeline::CreateRenderPipelineError::Stage { stage, error };
4241+
let stage_err = |error| pipeline::CreateRenderPipelineError::Stage {
4242+
stage: stage_bit,
4243+
error,
4244+
};
42404245

42414246
_vertex_entry_point_name = vertex_shader_module
42424247
.finalize_entry_point_name(
4243-
stage,
4248+
stage.to_naga(),
42444249
stage_desc.entry_point.as_ref().map(|ep| ep.as_ref()),
42454250
)
42464251
.map_err(stage_err)?;
@@ -4253,10 +4258,9 @@ impl Device {
42534258
&_vertex_entry_point_name,
42544259
stage,
42554260
io,
4256-
desc.depth_stencil.as_ref().map(|d| d.depth_compare),
42574261
)
42584262
.map_err(stage_err)?;
4259-
validated_stages |= stage;
4263+
validated_stages |= stage_bit;
42604264
}
42614265
Some(hal::ProgrammableStage {
42624266
module: vertex_shader_module.raw(),
@@ -4272,16 +4276,19 @@ impl Device {
42724276

42734277
task_stage = if let Some(task) = task {
42744278
let stage_desc = &task.stage;
4275-
let stage = wgt::ShaderStages::TASK;
4279+
let stage = validation::ShaderStageForValidation::Task;
4280+
let stage_bit = stage.to_wgt_bit();
42764281
let task_shader_module = &stage_desc.module;
42774282
task_shader_module.same_device(self)?;
42784283

4279-
let stage_err =
4280-
|error| pipeline::CreateRenderPipelineError::Stage { stage, error };
4284+
let stage_err = |error| pipeline::CreateRenderPipelineError::Stage {
4285+
stage: stage_bit,
4286+
error,
4287+
};
42814288

42824289
_task_entry_point_name = task_shader_module
42834290
.finalize_entry_point_name(
4284-
stage,
4291+
stage.to_naga(),
42854292
stage_desc.entry_point.as_ref().map(|ep| ep.as_ref()),
42864293
)
42874294
.map_err(stage_err)?;
@@ -4294,10 +4301,9 @@ impl Device {
42944301
&_task_entry_point_name,
42954302
stage,
42964303
io,
4297-
desc.depth_stencil.as_ref().map(|d| d.depth_compare),
42984304
)
42994305
.map_err(stage_err)?;
4300-
validated_stages |= stage;
4306+
validated_stages |= stage_bit;
43014307
}
43024308
Some(hal::ProgrammableStage {
43034309
module: task_shader_module.raw(),
@@ -4311,16 +4317,19 @@ impl Device {
43114317
};
43124318
mesh_stage = {
43134319
let stage_desc = &mesh.stage;
4314-
let stage = wgt::ShaderStages::MESH;
4320+
let stage = validation::ShaderStageForValidation::Mesh;
4321+
let stage_bit = stage.to_wgt_bit();
43154322
let mesh_shader_module = &stage_desc.module;
43164323
mesh_shader_module.same_device(self)?;
43174324

4318-
let stage_err =
4319-
|error| pipeline::CreateRenderPipelineError::Stage { stage, error };
4325+
let stage_err = |error| pipeline::CreateRenderPipelineError::Stage {
4326+
stage: stage_bit,
4327+
error,
4328+
};
43204329

43214330
_mesh_entry_point_name = mesh_shader_module
43224331
.finalize_entry_point_name(
4323-
stage,
4332+
stage.to_naga(),
43244333
stage_desc.entry_point.as_ref().map(|ep| ep.as_ref()),
43254334
)
43264335
.map_err(stage_err)?;
@@ -4333,10 +4342,9 @@ impl Device {
43334342
&_mesh_entry_point_name,
43344343
stage,
43354344
io,
4336-
desc.depth_stencil.as_ref().map(|d| d.depth_compare),
43374345
)
43384346
.map_err(stage_err)?;
4339-
validated_stages |= stage;
4347+
validated_stages |= stage_bit;
43404348
}
43414349
Some(hal::ProgrammableStage {
43424350
module: mesh_shader_module.raw(),
@@ -4352,16 +4360,20 @@ impl Device {
43524360
let fragment_entry_point_name;
43534361
let fragment_stage = match desc.fragment {
43544362
Some(ref fragment_state) => {
4355-
let stage = wgt::ShaderStages::FRAGMENT;
4363+
let stage = validation::ShaderStageForValidation::Fragment;
4364+
let stage_bit = stage.to_wgt_bit();
43564365

43574366
let shader_module = &fragment_state.stage.module;
43584367
shader_module.same_device(self)?;
43594368

4360-
let stage_err = |error| pipeline::CreateRenderPipelineError::Stage { stage, error };
4369+
let stage_err = |error| pipeline::CreateRenderPipelineError::Stage {
4370+
stage: stage_bit,
4371+
error,
4372+
};
43614373

43624374
fragment_entry_point_name = shader_module
43634375
.finalize_entry_point_name(
4364-
stage,
4376+
stage.to_naga(),
43654377
fragment_state
43664378
.stage
43674379
.entry_point
@@ -4378,17 +4390,16 @@ impl Device {
43784390
&fragment_entry_point_name,
43794391
stage,
43804392
io,
4381-
desc.depth_stencil.as_ref().map(|d| d.depth_compare),
43824393
)
43834394
.map_err(stage_err)?;
4384-
validated_stages |= stage;
4395+
validated_stages |= stage_bit;
43854396
}
43864397

43874398
if let Some(ref interface) = shader_module.interface {
43884399
shader_expects_dual_source_blending = interface
43894400
.fragment_uses_dual_source_blending(&fragment_entry_point_name)
43904401
.map_err(|error| pipeline::CreateRenderPipelineError::Stage {
4391-
stage,
4402+
stage: stage_bit,
43924403
error,
43934404
})?;
43944405
}

wgpu-core/src/pipeline.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ impl ShaderModule {
8989

9090
pub(crate) fn finalize_entry_point_name(
9191
&self,
92-
stage_bit: wgt::ShaderStages,
92+
stage: naga::ShaderStage,
9393
entry_point: Option<&str>,
9494
) -> Result<String, validation::StageError> {
9595
match &self.interface {
96-
Some(interface) => interface.finalize_entry_point_name(stage_bit, entry_point),
96+
Some(interface) => interface.finalize_entry_point_name(stage, entry_point),
9797
None => entry_point
9898
.map(|ep| ep.to_string())
9999
.ok_or(validation::StageError::NoEntryPointFound),

0 commit comments

Comments
 (0)