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#ifndef GrBackendSurfaceMutableStateImpl_DEFINED
9#define GrBackendSurfaceMutableStateImpl_DEFINED
10
11#include "include/core/SkRefCnt.h"
12#include "include/gpu/GrBackendSurfaceMutableState.h"
13
14class GrBackendSurfaceMutableStateImpl : public SkRefCnt {
15public:
16#ifdef SK_VULKAN
17 GrBackendSurfaceMutableStateImpl(VkImageLayout layout, uint32_t queueFamilyIndex)
18 : fState(layout, queueFamilyIndex) {}
19
20 GrBackendSurfaceMutableStateImpl(GrVkSharedImageInfo sharedInfo)
21 : fState(sharedInfo.getImageLayout(), sharedInfo.getQueueFamilyIndex()) {}
22#endif
23
24 void set(const GrBackendSurfaceMutableState& state) { fState = state; }
25
26#ifdef SK_VULKAN
27 VkImageLayout getImageLayout() const {
28 SkASSERT(fState.fBackend == GrBackend::kVulkan);
29 return fState.fVkState.getImageLayout();
30 }
31
32 void setImageLayout(VkImageLayout layout) {
33 SkASSERT(fState.fBackend == GrBackend::kVulkan);
34 fState.fVkState.setImageLayout(layout);
35 }
36
37 uint32_t getQueueFamilyIndex() const {
38 SkASSERT(fState.fBackend == GrBackend::kVulkan);
39 return fState.fVkState.getQueueFamilyIndex();
40 }
41
42 void setQueueFamilyIndex(uint32_t queueFamilyIndex) {
43 SkASSERT(fState.fBackend == GrBackend::kVulkan);
44 fState.fVkState.setQueueFamilyIndex(queueFamilyIndex);
45 }
46
47 const GrVkSharedImageInfo& getVkSharedImageInfo() {
48 SkASSERT(fState.fBackend == GrBackend::kVulkan);
49 return fState.fVkState;
50 }
51#endif
52
53
54private:
55 GrBackendSurfaceMutableState fState;
56};
57
58#endif
59