• 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/private/GrD3DTypesMinimal.h"
9 
10 #include "include/gpu/d3d/GrD3DTypes.h"
11 #include "src/gpu/d3d/GrD3DResourceState.h"
12 #include "src/gpu/d3d/GrD3DTypesPriv.h"
13 
GrD3DBackendSurfaceInfo(const GrD3DTextureResourceInfo & info,GrD3DResourceState * state)14 GrD3DBackendSurfaceInfo::GrD3DBackendSurfaceInfo(const GrD3DTextureResourceInfo& info,
15                                                  GrD3DResourceState* state)
16     : fTextureResourceInfo(new GrD3DTextureResourceInfo(info))
17     , fResourceState(state) {}
18 
cleanup()19 void GrD3DBackendSurfaceInfo::cleanup() {
20     SkSafeUnref(fResourceState);
21     fResourceState = nullptr;
22     delete fTextureResourceInfo;
23     fTextureResourceInfo = nullptr;
24 };
25 
assign(const GrD3DBackendSurfaceInfo & that,bool isThisValid)26 void GrD3DBackendSurfaceInfo::assign(const GrD3DBackendSurfaceInfo& that, bool isThisValid) {
27     GrD3DTextureResourceInfo* oldInfo = fTextureResourceInfo;
28     GrD3DResourceState* oldLayout = fResourceState;
29     fTextureResourceInfo = new GrD3DTextureResourceInfo(*that.fTextureResourceInfo);
30     fResourceState = SkSafeRef(that.fResourceState);
31     if (isThisValid) {
32         delete oldInfo;
33         SkSafeUnref(oldLayout);
34     }
35 }
36 
setResourceState(GrD3DResourceStateEnum resourceState)37 void GrD3DBackendSurfaceInfo::setResourceState(GrD3DResourceStateEnum resourceState) {
38     SkASSERT(fResourceState);
39     fResourceState->setResourceState(static_cast<D3D12_RESOURCE_STATES>(resourceState));
40 }
41 
getGrD3DResourceState() const42 sk_sp<GrD3DResourceState> GrD3DBackendSurfaceInfo::getGrD3DResourceState() const {
43     SkASSERT(fResourceState);
44     return sk_ref_sp(fResourceState);
45 }
46 
snapTextureResourceInfo() const47 GrD3DTextureResourceInfo GrD3DBackendSurfaceInfo::snapTextureResourceInfo() const {
48     return GrD3DTextureResourceInfo(
49             *fTextureResourceInfo,
50             static_cast<D3D12_RESOURCE_STATES>(fResourceState->getResourceState()));
51 }
52 
isProtected() const53 bool GrD3DBackendSurfaceInfo::isProtected() const {
54     SkASSERT(fTextureResourceInfo);
55     return fTextureResourceInfo->fProtected == GrProtected::kYes;
56 }
57 
58 #if GR_TEST_UTILS
operator ==(const GrD3DBackendSurfaceInfo & that) const59 bool GrD3DBackendSurfaceInfo::operator==(const GrD3DBackendSurfaceInfo& that) const {
60     GrD3DTextureResourceInfo cpyInfoThis = *fTextureResourceInfo;
61     GrD3DTextureResourceInfo cpyInfoThat = *that.fTextureResourceInfo;
62     // We don't care about the fResourceState here since we require they use the same
63     // GrD3DResourceState.
64     cpyInfoThis.fResourceState = D3D12_RESOURCE_STATE_COMMON;
65     cpyInfoThat.fResourceState = D3D12_RESOURCE_STATE_COMMON;
66     return cpyInfoThis == cpyInfoThat && fResourceState == that.fResourceState;
67 }
68 #endif
69 
GrD3DTextureResourceSpecHolder(const GrD3DSurfaceInfo & info)70 GrD3DTextureResourceSpecHolder::GrD3DTextureResourceSpecHolder(const GrD3DSurfaceInfo& info)
71         : fSpec(new GrD3DTextureResourceSpec(info)) {}
72 
getSurfaceInfo(uint32_t sampleCount,uint32_t levelCount,GrProtected isProtected) const73 GrD3DSurfaceInfo GrD3DTextureResourceSpecHolder::getSurfaceInfo(uint32_t sampleCount,
74                                                                 uint32_t levelCount,
75                                                                 GrProtected isProtected) const {
76     SkASSERT(fSpec);
77     return GrD3DTextureResourceSpecToSurfaceInfo(*fSpec, sampleCount, levelCount, isProtected);
78 }
79 
cleanup()80 void GrD3DTextureResourceSpecHolder::cleanup() {
81     delete fSpec;
82     fSpec = nullptr;
83 }
84 
85