Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test that DOMExceptions from WebGPU always have stacks #3105

Merged
merged 8 commits into from
Oct 31, 2023

Conversation

kainino0x
Copy link
Collaborator

@kainino0x kainino0x commented Oct 27, 2023

Complete list of 150 tests that break in Chromium with this change (and are fixed by the Chromium fix):

  webgpu:api,operation,adapter,requestDevice:limit,better_than_supported:*
  webgpu:api,operation,adapter,requestDevice:limit,worse_than_default:*
  webgpu:api,operation,adapter,requestDevice:limits,unknown:
  webgpu:api,operation,adapter,requestDevice:stale:
  webgpu:api,validation,buffer,mapping:getMappedRange,state,mapped:
  webgpu:api,validation,buffer,mapping:getMappedRange,state,mappedAgain:
  webgpu:api,validation,buffer,mapping:getMappedRange,state,mappedAtCreation:
  webgpu:api,validation,buffer,mapping:mapAsync,abort_over_invalid_error:
  webgpu:api,validation,buffer,mapping:mapAsync,invalidBuffer:
  webgpu:api,validation,buffer,mapping:mapAsync,offsetAndSizeAlignment:
  webgpu:api,validation,buffer,mapping:mapAsync,offsetAndSizeOOB:
  webgpu:api,validation,buffer,mapping:mapAsync,sizeUnspecifiedOOB:
  webgpu:api,validation,buffer,mapping:mapAsync,state,destroyed:
  webgpu:api,validation,buffer,mapping:mapAsync,state,mapped:
  webgpu:api,validation,buffer,mapping:mapAsync,state,mappedAtCreation:
  webgpu:api,validation,buffer,mapping:mapAsync,usage:
  webgpu:api,validation,buffer,mapping:unmap,state,mappingPending:
  webgpu:api,validation,capability_checks,features,texture_formats:depth_stencil_state:*
  webgpu:api,validation,capability_checks,limits,maxBindGroups:createPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxBindGroups:createPipelineLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxBindGroups:setBindGroup,at_over:*
  webgpu:api,validation,capability_checks,limits,maxBindingsPerBindGroup:createBindGroupLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxBindingsPerBindGroup:createPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxBufferSize:createBuffer,at_over:*
  webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:beginRenderPass,at_over:*
  webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:createRenderBundle,at_over:*
  webgpu:api,validation,capability_checks,limits,maxColorAttachmentBytesPerSample:createRenderPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxColorAttachments:beginRenderPass,at_over:*
  webgpu:api,validation,capability_checks,limits,maxColorAttachments:createRenderBundle,at_over:*
  webgpu:api,validation,capability_checks,limits,maxColorAttachments:createRenderPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxComputeInvocationsPerWorkgroup:createComputePipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeX:createComputePipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeY:createComputePipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupSizeZ:createComputePipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupStorageSize:createComputePipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupsPerDimension:dispatchWorkgroups,at_over:*
  webgpu:api,validation,capability_checks,limits,maxDynamicStorageBuffersPerPipelineLayout:createBindGroupLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxDynamicUniformBuffersPerPipelineLayout:createBindGroupLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxInterStageShaderComponents:createRenderPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxInterStageShaderVariables:createRenderPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createBindGroupLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxSampledTexturesPerShaderStage:createPipelineLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createBindGroupLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxSamplersPerShaderStage:createPipelineLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxStorageBufferBindingSize:createBindGroup,at_over:*
  webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createBindGroupLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxStorageBuffersPerShaderStage:createPipelineLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createBindGroupLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxStorageTexturesPerShaderStage:createPipelineLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxTextureArrayLayers:createTexture,at_over:*
  webgpu:api,validation,capability_checks,limits,maxTextureDimension1D:createTexture,at_over:*
  webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:configure,at_over:*
  webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:createTexture,at_over:*
  webgpu:api,validation,capability_checks,limits,maxTextureDimension2D:getCurrentTexture,at_over:*
  webgpu:api,validation,capability_checks,limits,maxTextureDimension3D:createTexture,at_over:*
  webgpu:api,validation,capability_checks,limits,maxUniformBufferBindingSize:createBindGroup,at_over:*
  webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createBindGroupLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxUniformBuffersPerShaderStage:createPipelineLayout,at_over:*
  webgpu:api,validation,capability_checks,limits,maxVertexAttributes:createRenderPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxVertexBufferArrayStride:createRenderPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxVertexBuffers:createRenderPipeline,at_over:*
  webgpu:api,validation,capability_checks,limits,maxVertexBuffers:setVertexBuffer,at_over:*
  webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:createBindGroup,at_over:*
  webgpu:api,validation,capability_checks,limits,minStorageBufferOffsetAlignment:setBindGroup,at_over:*
  webgpu:api,validation,capability_checks,limits,minUniformBufferOffsetAlignment:createBindGroup,at_over:*
  webgpu:api,validation,capability_checks,limits,minUniformBufferOffsetAlignment:setBindGroup,at_over:*
  webgpu:api,validation,compute_pipeline:limits,invocations_per_workgroup,each_component:*
  webgpu:api,validation,compute_pipeline:limits,invocations_per_workgroup:*
  webgpu:api,validation,compute_pipeline:limits,workgroup_storage_size:*
  webgpu:api,validation,compute_pipeline:overrides,identifier:*
  webgpu:api,validation,compute_pipeline:overrides,uninitialized:*
  webgpu:api,validation,compute_pipeline:overrides,value,validation_error,f16:*
  webgpu:api,validation,compute_pipeline:overrides,value,validation_error:*
  webgpu:api,validation,compute_pipeline:overrides,workgroup_size,limits,workgroup_storage_size:*
  webgpu:api,validation,compute_pipeline:overrides,workgroup_size,limits:*
  webgpu:api,validation,compute_pipeline:overrides,workgroup_size:*
  webgpu:api,validation,compute_pipeline:pipeline_layout,device_mismatch:
  webgpu:api,validation,compute_pipeline:shader_module,compute:*
  webgpu:api,validation,compute_pipeline:shader_module,device_mismatch:
  webgpu:api,validation,compute_pipeline:shader_module,invalid:*
  webgpu:api,validation,error_scope:balanced_nesting:*
  webgpu:api,validation,error_scope:balanced_siblings:*
  webgpu:api,validation,error_scope:empty:
  webgpu:api,validation,render_pipeline,depth_stencil_state:depthCompare_optional:*
  webgpu:api,validation,render_pipeline,depth_stencil_state:depthWriteEnabled_optional:*
  webgpu:api,validation,render_pipeline,depth_stencil_state:depth_test:*
  webgpu:api,validation,render_pipeline,depth_stencil_state:depth_write,frag_depth:*
  webgpu:api,validation,render_pipeline,depth_stencil_state:depth_write:*
  webgpu:api,validation,render_pipeline,depth_stencil_state:format:*
  webgpu:api,validation,render_pipeline,depth_stencil_state:stencil_test:*
  webgpu:api,validation,render_pipeline,depth_stencil_state:stencil_write:*
  webgpu:api,validation,render_pipeline,fragment_state:color_target_exists:*
  webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachmentBytesPerSample,aligned:*
  webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachmentBytesPerSample,unaligned:*
  webgpu:api,validation,render_pipeline,fragment_state:limits,maxColorAttachments:*
  webgpu:api,validation,render_pipeline,fragment_state:pipeline_output_targets,blend:*
  webgpu:api,validation,render_pipeline,fragment_state:pipeline_output_targets:*
  webgpu:api,validation,render_pipeline,fragment_state:targets_blend:*
  webgpu:api,validation,render_pipeline,fragment_state:targets_format_filterable:*
  webgpu:api,validation,render_pipeline,fragment_state:targets_format_renderable:*
  webgpu:api,validation,render_pipeline,fragment_state:targets_write_mask:*
  webgpu:api,validation,render_pipeline,inter_stage:interpolation_sampling:*
  webgpu:api,validation,render_pipeline,inter_stage:interpolation_type:*
  webgpu:api,validation,render_pipeline,inter_stage:location,mismatch:*
  webgpu:api,validation,render_pipeline,inter_stage:location,subset:*
  webgpu:api,validation,render_pipeline,inter_stage:max_components_count,input:*
  webgpu:api,validation,render_pipeline,inter_stage:max_components_count,output:*
  webgpu:api,validation,render_pipeline,inter_stage:max_shader_variable_location:*
  webgpu:api,validation,render_pipeline,inter_stage:type:*
  webgpu:api,validation,render_pipeline,misc:pipeline_layout,device_mismatch:
  webgpu:api,validation,render_pipeline,multisample_state:alpha_to_coverage,count:*
  webgpu:api,validation,render_pipeline,multisample_state:alpha_to_coverage,sample_mask:*
  webgpu:api,validation,render_pipeline,multisample_state:count:*
  webgpu:api,validation,render_pipeline,overrides:identifier,fragment:*
  webgpu:api,validation,render_pipeline,overrides:identifier,vertex:*
  webgpu:api,validation,render_pipeline,overrides:uninitialized,fragment:*
  webgpu:api,validation,render_pipeline,overrides:uninitialized,vertex:*
  webgpu:api,validation,render_pipeline,overrides:value,validation_error,f16,fragment:*
  webgpu:api,validation,render_pipeline,overrides:value,validation_error,f16,vertex:*
  webgpu:api,validation,render_pipeline,overrides:value,validation_error,fragment:*
  webgpu:api,validation,render_pipeline,overrides:value,validation_error,vertex:*
  webgpu:api,validation,render_pipeline,primitive_state:strip_index_format:*
  webgpu:api,validation,render_pipeline,primitive_state:unclipped_depth:*
  webgpu:api,validation,render_pipeline,shader_module:device_mismatch:
  webgpu:api,validation,render_pipeline,shader_module:invalid,fragment:*
  webgpu:api,validation,render_pipeline,shader_module:invalid,vertex:*
  webgpu:api,validation,shader_module,entry_point:compute:*
  webgpu:api,validation,shader_module,entry_point:fragment:*
  webgpu:api,validation,shader_module,entry_point:vertex:*
  worker_webgpu:api,validation,buffer,mapping:getMappedRange,state,mapped:
  worker_webgpu:api,validation,buffer,mapping:getMappedRange,state,mappedAgain:
  worker_webgpu:api,validation,buffer,mapping:getMappedRange,state,mappedAtCreation:
  worker_webgpu:api,validation,buffer,mapping:getMappedRange,state,mappingPending:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,abort_over_invalid_error:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,earlyRejection:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,invalidBuffer:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,offsetAndSizeAlignment:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,offsetAndSizeOOB:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,sizeUnspecifiedOOB:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,state,destroyed:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,state,mapped:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,state,mappedAtCreation:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,state,mappingPending:
  worker_webgpu:api,validation,buffer,mapping:mapAsync,usage:
  worker_webgpu:api,validation,buffer,mapping:unmap,state,mappingPending:

In doing this I found some missing tests, but I didn't add TODOs for them because they weren't in tests I'm modifying here. Filing separate issues for them.

Fixes #3103
Remaining issues are #3109 #3110


Requirements for PR author:

  • All missing test coverage is tracked with "TODO" or .unimplemented().
  • New helpers are /** documented */ and new helper files are found in helper_index.txt.
  • Test behaves as expected in a WebGPU implementation. (If not passing, explain above.)

Requirements for reviewer sign-off:

  • Tests are properly located in the test tree.
  • Test descriptions allow a reader to "read only the test plans and evaluate coverage completeness", and accurately reflect the test code.
  • Tests provide complete coverage (including validation control cases). Missing coverage MUST be covered by TODOs.
  • Helpers and types promote readability and maintainability.

When landing this PR, be sure to make any necessary issue status updates.

@kainino0x kainino0x force-pushed the check-stack-everywhere branch 3 times, most recently from 77fa81a to 6bf4ed6 Compare October 27, 2023 05:02
@github-actions
Copy link

Previews, as seen when this build job started (6bf4ed6):
Run tests | View tsdoc

@kainino0x kainino0x requested a review from austinEng October 28, 2023 00:36
@kainino0x kainino0x marked this pull request as ready for review October 28, 2023 00:36
@kainino0x kainino0x force-pushed the check-stack-everywhere branch from 6bf4ed6 to 8500b12 Compare October 28, 2023 00:37
@github-actions
Copy link

Previews, as seen when this build job started (8500b12):
Run tests | View tsdoc

@kainino0x kainino0x requested review from lokokung and removed request for austinEng October 30, 2023 20:37
src/common/framework/fixture.ts Outdated Show resolved Hide resolved
src/common/framework/fixture.ts Outdated Show resolved Hide resolved
src/common/util/util.ts Outdated Show resolved Hide resolved
src/common/framework/fixture.ts Outdated Show resolved Hide resolved
aarongable pushed a commit to chromium/chromium that referenced this pull request Oct 31, 2023
Switching how we construct DOMExceptions also conveniently prevents us
from accidentally creating DOMExceptions with no message string.

For GPUPipelineError, see WebTransportError as reference (the one other
custom exception that extends DOMException).

Also, early-out as necessary before attempting to resolve or reject a
promise from a callback.

Test: gpuweb/cts#3105
Fixed: 1496120
Bug: 1496117
Change-Id: I183f85195be6be004d344d660e02e5df6fbf5d5b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4978198
Commit-Queue: Kai Ninomiya <[email protected]>
Reviewed-by: Kenneth Russell <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1217376}
@kainino0x kainino0x enabled auto-merge (squash) October 31, 2023 03:06
@github-actions
Copy link

Previews, as seen when this build job started (2db3e5c):
Run tests | View tsdoc

@github-actions
Copy link

Previews, as seen when this build job started (8356a0d):
Run tests | View tsdoc

@kainino0x kainino0x merged commit ef5d229 into main Oct 31, 2023
@kainino0x kainino0x deleted the check-stack-everywhere branch October 31, 2023 03:14
@github-actions
Copy link

Previews, as seen when this build job started (eda0820):
Run tests | View tsdoc

@github-actions
Copy link

Previews, as seen when this build job started (89c2d8d):
Run tests | View tsdoc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Test that DOMExceptions from WebGPU always have stacks
2 participants