Skip to content

Commit

Permalink
[WebGPU] Reimplement device lost callback after https://bugs.webkit.o…
Browse files Browse the repository at this point in the history
…rg/show_bug.cgi?id=257640

https://bugs.webkit.org/show_bug.cgi?id=257656
<radar://110539837>

Reviewed by Dan Glastonbury.

Restore the deleted code from https://bugs.webkit.org/show_bug.cgi?id=257640 as it passes
the CTS and conforms to the specification.

Enable newly passing requestDevice.html CTS test.

Also implement the concept of invalid / stale adapters. Effectively, an adapter can only
request one device so make it invalid after the device is requested.

Unexpectedly the device_lost validation CTS test is now passing as well.

* LayoutTests/http/tests/webgpu/webgpu/api/operation/device/lost-expected.txt:
* LayoutTests/http/tests/webgpu/webgpu/api/validation/state/device_lost/destroy-expected.txt:
* LayoutTests/http/tests/webgpu/webgpu/api/operation/adapter/requestDevice-expected.txt:
* LayoutTests/platform/mac-wk2/TestExpectations:
* Source/WebCore/Modules/WebGPU/GPUDevice.cpp:
(WebCore::GPUDevice::lost):
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUAdapterImpl.cpp:
(WebCore::WebGPU::AdapterImpl::requestDevice):
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.cpp:
(WebCore::WebGPU::DeviceImpl::resolveDeviceLostPromise):
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.h:
* Source/WebCore/Modules/WebGPU/InternalAPI/WebGPUDevice.h:
* Source/WebGPU/WebGPU/Adapter.mm:
(WebGPU::Adapter::requestDevice):
* Source/WebGPU/WebGPU/Device.h:
* Source/WebGPU/WebGPU/Device.mm:
(WebGPU::Device::setDeviceLostCallback):
(wgpuDeviceSetDeviceLostCallback):
(wgpuDeviceSetDeviceLostCallbackWithBlock):
* Source/WebGPU/WebGPU/WebGPUExt.h:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.cpp:
(WebKit::RemoteDevice::resolveDeviceLostPromise):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.h:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.messages.in:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp:
(WebKit::WebGPU::RemoteDeviceProxy::resolveDeviceLostPromise):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h:
* LayoutTests/platform/mac-wk2/TestExpectations:
* Source/WebGPU/WebGPU/BindGroup.mm:
(WebGPU::Device::createBindGroup):
* Source/WebGPU/WebGPU/BindGroupLayout.mm:
(WebGPU::Device::createBindGroupLayout):
* Source/WebGPU/WebGPU/Buffer.mm:
(WebGPU::Device::createBuffer):
* Source/WebGPU/WebGPU/CommandEncoder.mm:
(WebGPU::Device::createCommandEncoder):
* Source/WebGPU/WebGPU/ComputePipeline.mm:
(WebGPU::Device::createComputePipelineAsync):
* Source/WebGPU/WebGPU/Device.mm:
(WebGPU::Device::loseTheDevice):
* Source/WebGPU/WebGPU/ExternalTexture.mm:
(WebGPU::Device::createExternalTexture):
* Source/WebGPU/WebGPU/PipelineLayout.mm:
(WebGPU::Device::createPipelineLayout):
* Source/WebGPU/WebGPU/QuerySet.mm:
(WebGPU::Device::createQuerySet):
* Source/WebGPU/WebGPU/RenderBundleEncoder.mm:
(WebGPU::Device::createRenderBundleEncoder):
* Source/WebGPU/WebGPU/RenderPipeline.mm:
(WebGPU::Device::createRenderPipeline):
(WebGPU::Device::createRenderPipelineAsync):
* Source/WebGPU/WebGPU/Sampler.mm:
(WebGPU::Device::createSampler):
* Source/WebGPU/WebGPU/ShaderModule.mm:
(WebGPU::Device::createShaderModule):
* Source/WebGPU/WebGPU/Texture.mm:
(WebGPU::Device::createTexture):

* Source/WebCore/Modules/WebGPU/Implementation/WebGPUAdapterImpl.cpp:

Canonical link: https://commits.webkit.org/270527@main
  • Loading branch information
mwyrzykowski committed Nov 10, 2023
1 parent 32983fe commit 1858526
Show file tree
Hide file tree
Showing 33 changed files with 2,936 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -1 +1,111 @@
(Populate me when we're ready to investigate this test)

PASS :default:
PASS :invalid:
PASS :stale:
PASS :features,unknown:
PASS :features,known:feature="bgra8unorm-storage"
PASS :features,known:feature="depth-clip-control"
PASS :features,known:feature="depth32float-stencil8"
PASS :features,known:feature="texture-compression-bc"
PASS :features,known:feature="texture-compression-etc2"
PASS :features,known:feature="texture-compression-astc"
PASS :features,known:feature="timestamp-query"
PASS :features,known:feature="indirect-first-instance"
PASS :features,known:feature="shader-f16"
PASS :features,known:feature="rg11b10ufloat-renderable"
PASS :features,known:feature="float32-filterable"
PASS :limits,unknown:
PASS :limits,supported:limit="maxTextureDimension1D"
PASS :limits,supported:limit="maxTextureDimension2D"
PASS :limits,supported:limit="maxTextureDimension3D"
PASS :limits,supported:limit="maxTextureArrayLayers"
PASS :limits,supported:limit="maxBindGroups"
PASS :limits,supported:limit="maxBindingsPerBindGroup"
PASS :limits,supported:limit="maxDynamicUniformBuffersPerPipelineLayout"
PASS :limits,supported:limit="maxDynamicStorageBuffersPerPipelineLayout"
PASS :limits,supported:limit="maxSampledTexturesPerShaderStage"
PASS :limits,supported:limit="maxSamplersPerShaderStage"
PASS :limits,supported:limit="maxStorageBuffersPerShaderStage"
PASS :limits,supported:limit="maxStorageTexturesPerShaderStage"
PASS :limits,supported:limit="maxUniformBuffersPerShaderStage"
PASS :limits,supported:limit="maxUniformBufferBindingSize"
PASS :limits,supported:limit="maxStorageBufferBindingSize"
PASS :limits,supported:limit="minUniformBufferOffsetAlignment"
PASS :limits,supported:limit="minStorageBufferOffsetAlignment"
PASS :limits,supported:limit="maxVertexBuffers"
PASS :limits,supported:limit="maxBufferSize"
PASS :limits,supported:limit="maxVertexAttributes"
PASS :limits,supported:limit="maxVertexBufferArrayStride"
PASS :limits,supported:limit="maxInterStageShaderComponents"
PASS :limits,supported:limit="maxInterStageShaderVariables"
PASS :limits,supported:limit="maxColorAttachments"
PASS :limits,supported:limit="maxColorAttachmentBytesPerSample"
PASS :limits,supported:limit="maxComputeWorkgroupStorageSize"
PASS :limits,supported:limit="maxComputeInvocationsPerWorkgroup"
PASS :limits,supported:limit="maxComputeWorkgroupSizeX"
PASS :limits,supported:limit="maxComputeWorkgroupSizeY"
PASS :limits,supported:limit="maxComputeWorkgroupSizeZ"
PASS :limits,supported:limit="maxComputeWorkgroupsPerDimension"
PASS :limit,better_than_supported:limit="maxTextureDimension1D"
PASS :limit,better_than_supported:limit="maxTextureDimension2D"
PASS :limit,better_than_supported:limit="maxTextureDimension3D"
PASS :limit,better_than_supported:limit="maxTextureArrayLayers"
PASS :limit,better_than_supported:limit="maxBindGroups"
PASS :limit,better_than_supported:limit="maxBindingsPerBindGroup"
PASS :limit,better_than_supported:limit="maxDynamicUniformBuffersPerPipelineLayout"
PASS :limit,better_than_supported:limit="maxDynamicStorageBuffersPerPipelineLayout"
PASS :limit,better_than_supported:limit="maxSampledTexturesPerShaderStage"
PASS :limit,better_than_supported:limit="maxSamplersPerShaderStage"
PASS :limit,better_than_supported:limit="maxStorageBuffersPerShaderStage"
PASS :limit,better_than_supported:limit="maxStorageTexturesPerShaderStage"
PASS :limit,better_than_supported:limit="maxUniformBuffersPerShaderStage"
PASS :limit,better_than_supported:limit="maxUniformBufferBindingSize"
PASS :limit,better_than_supported:limit="maxStorageBufferBindingSize"
PASS :limit,better_than_supported:limit="minUniformBufferOffsetAlignment"
PASS :limit,better_than_supported:limit="minStorageBufferOffsetAlignment"
PASS :limit,better_than_supported:limit="maxVertexBuffers"
PASS :limit,better_than_supported:limit="maxBufferSize"
PASS :limit,better_than_supported:limit="maxVertexAttributes"
PASS :limit,better_than_supported:limit="maxVertexBufferArrayStride"
PASS :limit,better_than_supported:limit="maxInterStageShaderComponents"
PASS :limit,better_than_supported:limit="maxInterStageShaderVariables"
PASS :limit,better_than_supported:limit="maxColorAttachments"
PASS :limit,better_than_supported:limit="maxColorAttachmentBytesPerSample"
PASS :limit,better_than_supported:limit="maxComputeWorkgroupStorageSize"
PASS :limit,better_than_supported:limit="maxComputeInvocationsPerWorkgroup"
PASS :limit,better_than_supported:limit="maxComputeWorkgroupSizeX"
PASS :limit,better_than_supported:limit="maxComputeWorkgroupSizeY"
PASS :limit,better_than_supported:limit="maxComputeWorkgroupSizeZ"
PASS :limit,better_than_supported:limit="maxComputeWorkgroupsPerDimension"
PASS :limit,worse_than_default:limit="maxTextureDimension1D"
PASS :limit,worse_than_default:limit="maxTextureDimension2D"
PASS :limit,worse_than_default:limit="maxTextureDimension3D"
PASS :limit,worse_than_default:limit="maxTextureArrayLayers"
PASS :limit,worse_than_default:limit="maxBindGroups"
PASS :limit,worse_than_default:limit="maxBindingsPerBindGroup"
PASS :limit,worse_than_default:limit="maxDynamicUniformBuffersPerPipelineLayout"
PASS :limit,worse_than_default:limit="maxDynamicStorageBuffersPerPipelineLayout"
PASS :limit,worse_than_default:limit="maxSampledTexturesPerShaderStage"
PASS :limit,worse_than_default:limit="maxSamplersPerShaderStage"
PASS :limit,worse_than_default:limit="maxStorageBuffersPerShaderStage"
PASS :limit,worse_than_default:limit="maxStorageTexturesPerShaderStage"
PASS :limit,worse_than_default:limit="maxUniformBuffersPerShaderStage"
PASS :limit,worse_than_default:limit="maxUniformBufferBindingSize"
PASS :limit,worse_than_default:limit="maxStorageBufferBindingSize"
PASS :limit,worse_than_default:limit="minUniformBufferOffsetAlignment"
PASS :limit,worse_than_default:limit="minStorageBufferOffsetAlignment"
PASS :limit,worse_than_default:limit="maxVertexBuffers"
PASS :limit,worse_than_default:limit="maxBufferSize"
PASS :limit,worse_than_default:limit="maxVertexAttributes"
PASS :limit,worse_than_default:limit="maxVertexBufferArrayStride"
PASS :limit,worse_than_default:limit="maxInterStageShaderComponents"
PASS :limit,worse_than_default:limit="maxInterStageShaderVariables"
PASS :limit,worse_than_default:limit="maxColorAttachments"
PASS :limit,worse_than_default:limit="maxColorAttachmentBytesPerSample"
PASS :limit,worse_than_default:limit="maxComputeWorkgroupStorageSize"
PASS :limit,worse_than_default:limit="maxComputeInvocationsPerWorkgroup"
PASS :limit,worse_than_default:limit="maxComputeWorkgroupSizeX"
PASS :limit,worse_than_default:limit="maxComputeWorkgroupSizeY"
PASS :limit,worse_than_default:limit="maxComputeWorkgroupSizeZ"
PASS :limit,worse_than_default:limit="maxComputeWorkgroupsPerDimension"

Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
(Populate me when we're ready to investigate this test)

PASS :not_lost_on_gc:
PASS :lost_on_destroy:
PASS :same_object:

Loading

0 comments on commit 1858526

Please sign in to comment.