GPUTexture objects are returned with “null” native Metal textures backing them when the “usage” flag is not set correctly. For example, you can set usage to 0 or a random number and a GPUTexture will still be returned by device.createTexture(…). This texture is also able to create a GPUTextureView. Unfortunately after that many internal errors may happen that can be very tricky to debug for application developers. For example if we always return a null GPUTexture with no Metal texture backing it: Ref<WebGPUTexture> WebGPUDevice::createTexture(const GPUTextureDescriptor& descriptor) const { auto texture = m_device->tryCreateTexture(descriptor); return WebGPUTexture::create(nullptr); } The tests under LayoutTests/webgpu/textures-textureviews.html will still all pass.
<rdar://problem/62822180>