1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 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 GrD3DBuffer_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #define GrD3DBuffer_DEFINED 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/d3d/GrD3DTypes.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrGpuBuffer.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrManagedResource.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class GrD3DGpu; 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker class GrD3DBuffer : public GrGpuBuffer { 19*c8dee2aaSAndroid Build Coastguard Worker public: 20*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrD3DBuffer> Make(GrD3DGpu*, size_t size, GrGpuBufferType, GrAccessPattern); 21*c8dee2aaSAndroid Build Coastguard Worker ~GrD3DBuffer()22*c8dee2aaSAndroid Build Coastguard Worker ~GrD3DBuffer() override {} 23*c8dee2aaSAndroid Build Coastguard Worker d3dResource()24*c8dee2aaSAndroid Build Coastguard Worker ID3D12Resource* d3dResource() const { 25*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fD3DResource); 26*c8dee2aaSAndroid Build Coastguard Worker return fD3DResource.get(); 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker void setResourceState(const GrD3DGpu* gpu, D3D12_RESOURCE_STATES newResourceState); 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker protected: 32*c8dee2aaSAndroid Build Coastguard Worker GrD3DBuffer(GrD3DGpu*, size_t size, GrGpuBufferType, GrAccessPattern, gr_cp<ID3D12Resource>, 33*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrD3DAlloc>, D3D12_RESOURCE_STATES, std::string_view label); 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker void onAbandon() override; 36*c8dee2aaSAndroid Build Coastguard Worker void onRelease() override; 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker D3D12_RESOURCE_STATES fResourceState; 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker private: 41*c8dee2aaSAndroid Build Coastguard Worker void releaseResource(); 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker void onMap(MapType) override; 44*c8dee2aaSAndroid Build Coastguard Worker void onUnmap(MapType) override; 45*c8dee2aaSAndroid Build Coastguard Worker bool onClearToZero() override; 46*c8dee2aaSAndroid Build Coastguard Worker bool onUpdateData(const void* src, size_t offset, size_t size, bool preserve) override; 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker void* internalMap(MapType, size_t offset, size_t size); 49*c8dee2aaSAndroid Build Coastguard Worker void internalUnmap(MapType, size_t offset, size_t size); 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_DEBUG 52*c8dee2aaSAndroid Build Coastguard Worker void validate() const; 53*c8dee2aaSAndroid Build Coastguard Worker #endif 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker void onSetLabel() override; 56*c8dee2aaSAndroid Build Coastguard Worker getD3DGpu()57*c8dee2aaSAndroid Build Coastguard Worker GrD3DGpu* getD3DGpu() const { 58*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(!this->wasDestroyed()); 59*c8dee2aaSAndroid Build Coastguard Worker return reinterpret_cast<GrD3DGpu*>(this->getGpu()); 60*c8dee2aaSAndroid Build Coastguard Worker } 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker gr_cp<ID3D12Resource> fD3DResource; 63*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrD3DAlloc> fAlloc; 64*c8dee2aaSAndroid Build Coastguard Worker ID3D12Resource* fStagingBuffer = nullptr; 65*c8dee2aaSAndroid Build Coastguard Worker size_t fStagingOffset = 0; 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrGpuBuffer; 68*c8dee2aaSAndroid Build Coastguard Worker }; 69*c8dee2aaSAndroid Build Coastguard Worker 70*c8dee2aaSAndroid Build Coastguard Worker #endif 71