#pragma once
#if ENABLE(WEBGPU)
#include "GPUCommandBuffer.h"
#include "GPUQueue.h"
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
#include <wtf/RetainPtr.h>
OBJC_PROTOCOL(MTLDevice);
namespace WebCore {
using PlatformDevice = MTLDevice;
using PlatformDeviceSmartPtr = RetainPtr<MTLDevice>;
class GPUBindGroupLayout;
class GPUBuffer;
class GPUPipelineLayout;
class GPURenderPipeline;
class GPUShaderModule;
struct GPUBindGroupLayoutDescriptor;
struct GPUBufferDescriptor;
struct GPUPipelineLayoutDescriptor;
struct GPURenderPipelineDescriptor;
struct GPUShaderModuleDescriptor;
class GPUDevice : public RefCounted<GPUDevice> {
public:
static RefPtr<GPUDevice> create();
RefPtr<GPUBuffer> createBuffer(GPUBufferDescriptor&&) const;
RefPtr<GPUBindGroupLayout> tryCreateBindGroupLayout(GPUBindGroupLayoutDescriptor&&) const;
Ref<GPUPipelineLayout> createPipelineLayout(GPUPipelineLayoutDescriptor&&) const;
RefPtr<GPUShaderModule> createShaderModule(GPUShaderModuleDescriptor&&) const;
RefPtr<GPURenderPipeline> createRenderPipeline(GPURenderPipelineDescriptor&&) const;
RefPtr<GPUCommandBuffer> createCommandBuffer();
RefPtr<GPUQueue> getQueue();
PlatformDevice* platformDevice() const { return m_platformDevice.get(); }
private:
GPUDevice(PlatformDeviceSmartPtr&&);
PlatformDeviceSmartPtr m_platformDevice;
RefPtr<GPUQueue> m_queue;
};
}
#endif // ENABLE(WEBGPU)