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_DawnBuffer_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_DawnBuffer_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/core/SkRefCnt.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/dawn/DawnTypes.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/RefCntedCallback.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/Buffer.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/dawn/DawnAsyncWait.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/dawn/DawnSharedContext.h" 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker class DawnBuffer : public Buffer { 24*c8dee2aaSAndroid Build Coastguard Worker public: 25*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<DawnBuffer> Make(const DawnSharedContext*, 26*c8dee2aaSAndroid Build Coastguard Worker size_t size, 27*c8dee2aaSAndroid Build Coastguard Worker BufferType type, 28*c8dee2aaSAndroid Build Coastguard Worker AccessPattern); 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker bool isUnmappable() const override; 31*c8dee2aaSAndroid Build Coastguard Worker dawnBuffer()32*c8dee2aaSAndroid Build Coastguard Worker const wgpu::Buffer& dawnBuffer() const { return fBuffer; } 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker private: 35*c8dee2aaSAndroid Build Coastguard Worker DawnBuffer(const DawnSharedContext*, size_t size, wgpu::Buffer, void* mapAtCreationPtr); 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker #if defined(__EMSCRIPTEN__) 38*c8dee2aaSAndroid Build Coastguard Worker void prepareForReturnToCache(const std::function<void()>& takeRef) override; 39*c8dee2aaSAndroid Build Coastguard Worker void onAsyncMap(GpuFinishedProc, GpuFinishedContext) override; 40*c8dee2aaSAndroid Build Coastguard Worker #endif 41*c8dee2aaSAndroid Build Coastguard Worker void onMap() override; 42*c8dee2aaSAndroid Build Coastguard Worker void onUnmap() override; 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker template <typename StatusT, typename MessageT> 45*c8dee2aaSAndroid Build Coastguard Worker void mapCallback(StatusT status, MessageT message); 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker void freeGpuData() override; 48*c8dee2aaSAndroid Build Coastguard Worker dawnSharedContext()49*c8dee2aaSAndroid Build Coastguard Worker const DawnSharedContext* dawnSharedContext() const { 50*c8dee2aaSAndroid Build Coastguard Worker return static_cast<const DawnSharedContext*>(this->sharedContext()); 51*c8dee2aaSAndroid Build Coastguard Worker } 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker void setBackendLabel(char const* label) override; 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker wgpu::Buffer fBuffer; 56*c8dee2aaSAndroid Build Coastguard Worker SkMutex fAsyncMutex; 57*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<sk_sp<RefCntedCallback>> fAsyncMapCallbacks SK_GUARDED_BY(fAsyncMutex); 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_DawnBuffer_DEFINED 63*c8dee2aaSAndroid Build Coastguard Worker 64