1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2022 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef skgpu_graphite_DawnSharedContext_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_DawnSharedContext_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "webgpu/webgpu_cpp.h" // NO_G3_REWRITE 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/dawn/DawnBackendContext.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/SharedContext.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/dawn/DawnCaps.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker struct DawnBackendContext; 20*c8dee2aaSAndroid Build Coastguard Worker struct ContextOptions; 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker class DawnSharedContext final : public SharedContext { 23*c8dee2aaSAndroid Build Coastguard Worker public: 24*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<SharedContext> Make(const DawnBackendContext&, const ContextOptions&); 25*c8dee2aaSAndroid Build Coastguard Worker ~DawnSharedContext() override; 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<ResourceProvider> makeResourceProvider(SingleOwner*, 28*c8dee2aaSAndroid Build Coastguard Worker uint32_t recorderID, 29*c8dee2aaSAndroid Build Coastguard Worker size_t resourceBudget, 30*c8dee2aaSAndroid Build Coastguard Worker bool avoidBufferAlloc) override; 31*c8dee2aaSAndroid Build Coastguard Worker dawnCaps()32*c8dee2aaSAndroid Build Coastguard Worker const DawnCaps* dawnCaps() const { return static_cast<const DawnCaps*>(this->caps()); } device()33*c8dee2aaSAndroid Build Coastguard Worker const wgpu::Device& device() const { return fDevice; } queue()34*c8dee2aaSAndroid Build Coastguard Worker const wgpu::Queue& queue() const { return fQueue; } noopFragment()35*c8dee2aaSAndroid Build Coastguard Worker const wgpu::ShaderModule& noopFragment() const { return fNoopFragment; } 36*c8dee2aaSAndroid Build Coastguard Worker hasTick()37*c8dee2aaSAndroid Build Coastguard Worker bool hasTick() const { return fTick; } 38*c8dee2aaSAndroid Build Coastguard Worker tick()39*c8dee2aaSAndroid Build Coastguard Worker void tick() const { 40*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(this->hasTick()); 41*c8dee2aaSAndroid Build Coastguard Worker fTick(fInstance); 42*c8dee2aaSAndroid Build Coastguard Worker } 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker void deviceTick(Context*) override; 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker private: 47*c8dee2aaSAndroid Build Coastguard Worker DawnSharedContext(const DawnBackendContext&, 48*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<const DawnCaps> caps, 49*c8dee2aaSAndroid Build Coastguard Worker wgpu::ShaderModule noopFragment); 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker wgpu::Instance fInstance; 52*c8dee2aaSAndroid Build Coastguard Worker wgpu::Device fDevice; 53*c8dee2aaSAndroid Build Coastguard Worker wgpu::Queue fQueue; 54*c8dee2aaSAndroid Build Coastguard Worker DawnTickFunction* fTick; 55*c8dee2aaSAndroid Build Coastguard Worker // A noop fragment shader, it is used to workaround dawn a validation error(dawn doesn't allow 56*c8dee2aaSAndroid Build Coastguard Worker // a pipeline with a color attachment but without a fragment shader). 57*c8dee2aaSAndroid Build Coastguard Worker wgpu::ShaderModule fNoopFragment; 58*c8dee2aaSAndroid Build Coastguard Worker }; 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_DawnSharedContext_DEFINED 63