• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)13 GrD3DBackendSurfaceInfo::GrD3DBackendSurfaceInfo(const GrD3DTextureResourceInfo& info,
14                                                  GrD3DResourceState* state)
15     : fTextureResourceInfo(new GrD3DTextureResourceInfo(info))
16     , fResourceState(state) {}
17 
cleanup()18 void GrD3DBackendSurfaceInfo::cleanup() {
19     SkSafeUnref(fResourceState);
20     fResourceState = nullptr;
21     delete fTextureResourceInfo;
22     fTextureResourceInfo = nullptr;
23 };
24 
assign(const GrD3DBackendSurfaceInfo & that,bool isThisValid)25 void 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)36 void GrD3DBackendSurfaceInfo::setResourceState(GrD3DResourceStateEnum resourceState) {
37     SkASSERT(fResourceState);
38     fResourceState->setResourceState(static_cast<D3D12_RESOURCE_STATES>(resourceState));
39 }
40 
getGrD3DResourceState() const41 sk_sp<GrD3DResourceState> GrD3DBackendSurfaceInfo::getGrD3DResourceState() const {
42     SkASSERT(fResourceState);
43     return sk_ref_sp(fResourceState);
44 }
45 
snapTextureResourceInfo() const46 GrD3DTextureResourceInfo GrD3DBackendSurfaceInfo::snapTextureResourceInfo() const {
47     return GrD3DTextureResourceInfo(*fTextureResourceInfo, fResourceState->getResourceState());
48 }
49 
isProtected() const50 bool GrD3DBackendSurfaceInfo::isProtected() const {
51     SkASSERT(fTextureResourceInfo);
52     return fTextureResourceInfo->fProtected == GrProtected::kYes;
53 }
54 
55 #if GR_TEST_UTILS
operator ==(const GrD3DBackendSurfaceInfo & that) const56 bool 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