1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google Inc. 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_Buffer_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_Buffer_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/GpuTypes.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/Resource.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/ResourceTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker class Buffer : public Resource { 18*c8dee2aaSAndroid Build Coastguard Worker public: size()19*c8dee2aaSAndroid Build Coastguard Worker size_t size() const { return fSize; } isProtected()20*c8dee2aaSAndroid Build Coastguard Worker Protected isProtected() const { return fIsProtected; } 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker // TODO(b/262249983): Separate into mapRead(), mapWrite() methods. 23*c8dee2aaSAndroid Build Coastguard Worker // If the buffer is already mapped then pointer is returned. If an asyncMap() was started then 24*c8dee2aaSAndroid Build Coastguard Worker // it is waited on. Otherwise, a synchronous map is performed. 25*c8dee2aaSAndroid Build Coastguard Worker void* map(); 26*c8dee2aaSAndroid Build Coastguard Worker // Starts a new asynchronous map. 27*c8dee2aaSAndroid Build Coastguard Worker void asyncMap(GpuFinishedProc = nullptr, GpuFinishedContext = nullptr); 28*c8dee2aaSAndroid Build Coastguard Worker // If the buffer is mapped then unmaps. If an async map is pending then it is cancelled. 29*c8dee2aaSAndroid Build Coastguard Worker void unmap(); 30*c8dee2aaSAndroid Build Coastguard Worker isMapped()31*c8dee2aaSAndroid Build Coastguard Worker bool isMapped() const { return fMapPtr; } 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker // Returns true if mapped or an asyncMap was started and hasn't been completed or canceled. 34*c8dee2aaSAndroid Build Coastguard Worker virtual bool isUnmappable() const; 35*c8dee2aaSAndroid Build Coastguard Worker getResourceType()36*c8dee2aaSAndroid Build Coastguard Worker const char* getResourceType() const override { return "Buffer"; } 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker protected: 39*c8dee2aaSAndroid Build Coastguard Worker Buffer(const SharedContext* sharedContext, 40*c8dee2aaSAndroid Build Coastguard Worker size_t size, 41*c8dee2aaSAndroid Build Coastguard Worker Protected isProtected, 42*c8dee2aaSAndroid Build Coastguard Worker bool commandBufferRefsAsUsageRefs = false) Resource(sharedContext,Ownership::kOwned,skgpu::Budgeted::kYes,size,commandBufferRefsAsUsageRefs)43*c8dee2aaSAndroid Build Coastguard Worker : Resource(sharedContext, 44*c8dee2aaSAndroid Build Coastguard Worker Ownership::kOwned, 45*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted::kYes, 46*c8dee2aaSAndroid Build Coastguard Worker size, 47*c8dee2aaSAndroid Build Coastguard Worker /*commandBufferRefsAsUsageRefs=*/commandBufferRefsAsUsageRefs) 48*c8dee2aaSAndroid Build Coastguard Worker , fSize(size) 49*c8dee2aaSAndroid Build Coastguard Worker , fIsProtected(isProtected) {} 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker void* fMapPtr = nullptr; 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker private: 54*c8dee2aaSAndroid Build Coastguard Worker virtual void onMap() = 0; 55*c8dee2aaSAndroid Build Coastguard Worker virtual void onAsyncMap(GpuFinishedProc, GpuFinishedContext); 56*c8dee2aaSAndroid Build Coastguard Worker virtual void onUnmap() = 0; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker size_t fSize; 59*c8dee2aaSAndroid Build Coastguard Worker Protected fIsProtected; 60*c8dee2aaSAndroid Build Coastguard Worker }; 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 63*c8dee2aaSAndroid Build Coastguard Worker 64*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_Buffer_DEFINED 65