1 /* 2 * Copyright 2020 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "include/gpu/d3d/GrD3DTypes.h" 9 #include "include/private/GrD3DTypesPriv.h" 10 11 #include "src/gpu/d3d/GrD3DResourceState.h" 12 GrD3DBackendSurfaceInfo(const GrD3DTextureResourceInfo & info,GrD3DResourceState * state)13GrD3DBackendSurfaceInfo::GrD3DBackendSurfaceInfo(const GrD3DTextureResourceInfo& info, 14 GrD3DResourceState* state) 15 : fTextureResourceInfo(new GrD3DTextureResourceInfo(info)) 16 , fResourceState(state) {} 17 cleanup()18void GrD3DBackendSurfaceInfo::cleanup() { 19 SkSafeUnref(fResourceState); 20 fResourceState = nullptr; 21 delete fTextureResourceInfo; 22 fTextureResourceInfo = nullptr; 23 }; 24 assign(const GrD3DBackendSurfaceInfo & that,bool isThisValid)25void GrD3DBackendSurfaceInfo::assign(const GrD3DBackendSurfaceInfo& that, bool isThisValid) { 26 GrD3DTextureResourceInfo* oldInfo = fTextureResourceInfo; 27 GrD3DResourceState* oldLayout = fResourceState; 28 fTextureResourceInfo = new GrD3DTextureResourceInfo(*that.fTextureResourceInfo); 29 fResourceState = SkSafeRef(that.fResourceState); 30 if (isThisValid) { 31 delete oldInfo; 32 SkSafeUnref(oldLayout); 33 } 34 } 35 setResourceState(GrD3DResourceStateEnum resourceState)36void GrD3DBackendSurfaceInfo::setResourceState(GrD3DResourceStateEnum resourceState) { 37 SkASSERT(fResourceState); 38 fResourceState->setResourceState(static_cast<D3D12_RESOURCE_STATES>(resourceState)); 39 } 40 getGrD3DResourceState() const41sk_sp<GrD3DResourceState> GrD3DBackendSurfaceInfo::getGrD3DResourceState() const { 42 SkASSERT(fResourceState); 43 return sk_ref_sp(fResourceState); 44 } 45 snapTextureResourceInfo() const46GrD3DTextureResourceInfo GrD3DBackendSurfaceInfo::snapTextureResourceInfo() const { 47 return GrD3DTextureResourceInfo(*fTextureResourceInfo, fResourceState->getResourceState()); 48 } 49 isProtected() const50bool GrD3DBackendSurfaceInfo::isProtected() const { 51 SkASSERT(fTextureResourceInfo); 52 return fTextureResourceInfo->fProtected == GrProtected::kYes; 53 } 54 55 #if GR_TEST_UTILS operator ==(const GrD3DBackendSurfaceInfo & that) const56bool GrD3DBackendSurfaceInfo::operator==(const GrD3DBackendSurfaceInfo& that) const { 57 GrD3DTextureResourceInfo cpyInfoThis = *fTextureResourceInfo; 58 GrD3DTextureResourceInfo cpyInfoThat = *that.fTextureResourceInfo; 59 // We don't care about the fResourceState here since we require they use the same 60 // GrD3DResourceState. 61 cpyInfoThis.fResourceState = D3D12_RESOURCE_STATE_COMMON; 62 cpyInfoThat.fResourceState = D3D12_RESOURCE_STATE_COMMON; 63 return cpyInfoThis == cpyInfoThat && fResourceState == that.fResourceState; 64 } 65 #endif 66