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