124 DawnProcTable backendProcs = dawn::native::GetProcs();
125 dawnProcSetProcs(&backendProcs);
127 static constexpr const char* kToggles[] = {
129 "use_user_defined_labels_in_backend",
131 wgpu::DawnTogglesDescriptor togglesDesc;
132 togglesDesc.enabledToggleCount = std::size(kToggles);
133 togglesDesc.enabledToggles = kToggles;
135 wgpu::RequestAdapterOptions adapterOptions;
136 adapterOptions.backendType =
type;
137 adapterOptions.nextInChain = &togglesDesc;
139 std::vector<dawn::native::Adapter> adapters =
fInstance->EnumerateAdapters(&adapterOptions);
140 if (adapters.empty()) {
144 wgpu::Adapter adapter = adapters[0].Get();
146 std::vector<wgpu::FeatureName> features;
147 features.push_back(wgpu::FeatureName::SurfaceCapabilities);
148 if (adapter.HasFeature(wgpu::FeatureName::MSAARenderToSingleSampled)) {
149 features.push_back(wgpu::FeatureName::MSAARenderToSingleSampled);
151 if (adapter.HasFeature(wgpu::FeatureName::TransientAttachments)) {
152 features.push_back(wgpu::FeatureName::TransientAttachments);
154 if (adapter.HasFeature(wgpu::FeatureName::Unorm16TextureFormats)) {
155 features.push_back(wgpu::FeatureName::Unorm16TextureFormats);
157 if (adapter.HasFeature(wgpu::FeatureName::DualSourceBlending)) {
158 features.push_back(wgpu::FeatureName::DualSourceBlending);
160 if (adapter.HasFeature(wgpu::FeatureName::FramebufferFetch)) {
161 features.push_back(wgpu::FeatureName::FramebufferFetch);
163 if (adapter.HasFeature(wgpu::FeatureName::BufferMapExtendedUsages)) {
164 features.push_back(wgpu::FeatureName::BufferMapExtendedUsages);
166 if (adapter.HasFeature(wgpu::FeatureName::TextureCompressionETC2)) {
167 features.push_back(wgpu::FeatureName::TextureCompressionETC2);
169 if (adapter.HasFeature(wgpu::FeatureName::TextureCompressionBC)) {
170 features.push_back(wgpu::FeatureName::TextureCompressionBC);
172 if (adapter.HasFeature(wgpu::FeatureName::R8UnormStorage)) {
173 features.push_back(wgpu::FeatureName::R8UnormStorage);
176 wgpu::DeviceDescriptor deviceDescriptor;
177 deviceDescriptor.requiredFeatures = features.data();
178 deviceDescriptor.requiredFeatureCount = features.size();
180 auto device = adapter.CreateDevice(&deviceDescriptor);
185 device.SetUncapturedErrorCallback(
186 [](WGPUErrorType
type,
const char*
message,
void*) {
195 wgpu::SwapChainDescriptor swapChainDesc;
196 swapChainDesc.usage = wgpu::TextureUsage::RenderAttachment |
197 wgpu::TextureUsage::TextureBinding |
198 wgpu::TextureUsage::CopySrc |
199 wgpu::TextureUsage::CopyDst;
201 swapChainDesc.width =
fWidth;
202 swapChainDesc.height =
fHeight;
203 swapChainDesc.presentMode =
sk_sp< GrDirectContext > fContext
DisplayParams fDisplayParams
sk_sp< SkSurface > getBackbufferSurface() override
virtual void onDestroyContext()=0
virtual bool onInitializeContext()=0
GraphiteDawnWindowContext(const DisplayParams &, wgpu::TextureFormat swapChainFormat)
void setDisplayParams(const DisplayParams ¶ms) override
wgpu::TextureFormat fSwapChainFormat
std::unique_ptr< dawn::native::Instance > fInstance
wgpu::Device createDevice(wgpu::BackendType type)
~GraphiteDawnWindowContext() override
wgpu::SwapChain createSwapChain()
void initializeContext(int width, int height)
SK_API sk_sp< SkSurface > WrapBackendTexture(GrRecordingContext *context, const GrBackendTexture &backendTexture, GrSurfaceOrigin origin, int sampleCnt, SkColorType colorType, sk_sp< SkColorSpace > colorSpace, const SkSurfaceProps *surfaceProps, TextureReleaseProc textureReleaseProc=nullptr, ReleaseContext releaseContext=nullptr)
SK_API std::unique_ptr< Context > MakeDawn(const DawnBackendContext &, const ContextOptions &)