1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2020 Google LLC 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef GrD3DBuffer_DEFINED 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#define GrD3DBuffer_DEFINED 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci#include "include/gpu/d3d/GrD3DTypes.h" 13cb93a386Sopenharmony_ci#include "src/gpu/GrGpuBuffer.h" 14cb93a386Sopenharmony_ci#include "src/gpu/GrManagedResource.h" 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_ciclass GrD3DGpu; 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciclass GrD3DBuffer : public GrGpuBuffer { 19cb93a386Sopenharmony_cipublic: 20cb93a386Sopenharmony_ci static sk_sp<GrD3DBuffer> Make(GrD3DGpu*, size_t size, GrGpuBufferType, GrAccessPattern); 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci ~GrD3DBuffer() override {} 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci ID3D12Resource* d3dResource() const { 25cb93a386Sopenharmony_ci SkASSERT(fD3DResource); 26cb93a386Sopenharmony_ci return fD3DResource.get(); 27cb93a386Sopenharmony_ci } 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ci void setResourceState(const GrD3DGpu* gpu, D3D12_RESOURCE_STATES newResourceState); 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ciprotected: 32cb93a386Sopenharmony_ci GrD3DBuffer(GrD3DGpu*, size_t size, GrGpuBufferType, GrAccessPattern, gr_cp<ID3D12Resource>, 33cb93a386Sopenharmony_ci sk_sp<GrD3DAlloc>, D3D12_RESOURCE_STATES); 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci void onAbandon() override; 36cb93a386Sopenharmony_ci void onRelease() override; 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci D3D12_RESOURCE_STATES fResourceState; 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ciprivate: 41cb93a386Sopenharmony_ci void releaseResource(); 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci void onMap() override; 44cb93a386Sopenharmony_ci void onUnmap() override; 45cb93a386Sopenharmony_ci bool onUpdateData(const void* src, size_t srcSizeInBytes) override; 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ci void internalMap(size_t size); 48cb93a386Sopenharmony_ci void internalUnmap(size_t size); 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci void validate() const; 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci GrD3DGpu* getD3DGpu() const { 53cb93a386Sopenharmony_ci SkASSERT(!this->wasDestroyed()); 54cb93a386Sopenharmony_ci return reinterpret_cast<GrD3DGpu*>(this->getGpu()); 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci gr_cp<ID3D12Resource> fD3DResource; 58cb93a386Sopenharmony_ci sk_sp<GrD3DAlloc> fAlloc; 59cb93a386Sopenharmony_ci ID3D12Resource* fStagingBuffer = nullptr; 60cb93a386Sopenharmony_ci size_t fStagingOffset = 0; 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ci using INHERITED = GrGpuBuffer; 63cb93a386Sopenharmony_ci}; 64cb93a386Sopenharmony_ci 65cb93a386Sopenharmony_ci#endif 66