xref: /aosp_15_r20/external/skia/src/gpu/vk/VulkanMutableTextureState.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2023 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/vk/VulkanMutableTextureState.h"
9 
10 #include "include/gpu/GpuTypes.h"
11 #include "include/gpu/MutableTextureState.h"
12 #include "include/private/base/SkAssert.h"
13 #include "include/private/base/SkDebug.h"
14 #include "src/gpu/MutableTextureStatePriv.h"
15 #include "src/gpu/vk/VulkanMutableTextureStatePriv.h"
16 
17 namespace skgpu::MutableTextureStates {
18 
19 class VulkanMutableTextureState : public MutableTextureStateData {
20 public:
VulkanMutableTextureState(VkImageLayout layout,uint32_t queueFamilyIndex)21     VulkanMutableTextureState(VkImageLayout layout, uint32_t queueFamilyIndex)
22             : fLayout(layout)
23             , fQueueFamilyIndex(queueFamilyIndex) {}
24 
25 #if defined(SK_DEBUG)
type() const26     BackendApi type() const override { return BackendApi::kVulkan; }
27 #endif
28 
copyTo(AnyStateData & formatData) const29     void copyTo(AnyStateData& formatData) const override {
30         formatData.emplace<VulkanMutableTextureState>(fLayout, fQueueFamilyIndex);
31     }
32 
33     VkImageLayout fLayout;
34     uint32_t      fQueueFamilyIndex;
35 };
36 
MakeVulkan(VkImageLayout layout,uint32_t queueFamilyIndex)37 MutableTextureState MakeVulkan(VkImageLayout layout, uint32_t queueFamilyIndex) {
38     return MutableTextureStatePriv::MakeMutableTextureState(
39             BackendApi::kVulkan,
40             VulkanMutableTextureState(layout, queueFamilyIndex));
41 }
42 
get_and_cast_data(const MutableTextureState & mts)43 static const VulkanMutableTextureState* get_and_cast_data(const MutableTextureState& mts) {
44     auto data = skgpu::MutableTextureStatePriv::GetStateData(mts);
45     SkASSERT(!data || data->type() == BackendApi::kVulkan);
46     return static_cast<const VulkanMutableTextureState*>(data);
47 }
48 
get_and_cast_data(const MutableTextureState * mts)49 static const VulkanMutableTextureState* get_and_cast_data(const MutableTextureState* mts) {
50     auto data = skgpu::MutableTextureStatePriv::GetStateData(mts);
51     SkASSERT(!data || data->type() == BackendApi::kVulkan);
52     return static_cast<const VulkanMutableTextureState*>(data);
53 }
54 
get_and_cast_data(MutableTextureState * mts)55 static VulkanMutableTextureState* get_and_cast_data(MutableTextureState* mts) {
56     auto data = skgpu::MutableTextureStatePriv::GetStateData(mts);
57     SkASSERT(!data || data->type() == BackendApi::kVulkan);
58     return static_cast<VulkanMutableTextureState*>(data);
59 }
60 
GetVkImageLayout(const MutableTextureState & state)61 VkImageLayout GetVkImageLayout(const MutableTextureState& state) {
62     SkASSERT(state.backend() == BackendApi::kVulkan);
63     return get_and_cast_data(state)->fLayout;
64 }
65 
GetVkImageLayout(const MutableTextureState * state)66 VkImageLayout GetVkImageLayout(const MutableTextureState* state) {
67     SkASSERT(state);
68     SkASSERT(state->backend() == BackendApi::kVulkan);
69     return get_and_cast_data(state)->fLayout;
70 }
71 
SetVkImageLayout(MutableTextureState * state,VkImageLayout layout)72 void SetVkImageLayout(MutableTextureState* state, VkImageLayout layout) {
73     SkASSERT(state->backend() == BackendApi::kVulkan);
74     get_and_cast_data(state)->fLayout = layout;
75 }
76 
GetVkQueueFamilyIndex(const MutableTextureState & state)77 uint32_t GetVkQueueFamilyIndex(const MutableTextureState& state) {
78     SkASSERT(state.backend() == BackendApi::kVulkan);
79     return get_and_cast_data(state)->fQueueFamilyIndex;
80 }
81 
GetVkQueueFamilyIndex(const MutableTextureState * state)82 uint32_t GetVkQueueFamilyIndex(const MutableTextureState* state) {
83     SkASSERT(state);
84     SkASSERT(state->backend() == BackendApi::kVulkan);
85     return get_and_cast_data(state)->fQueueFamilyIndex;
86 }
87 
SetVkQueueFamilyIndex(MutableTextureState * state,uint32_t queueFamilyIndex)88 void SetVkQueueFamilyIndex(MutableTextureState* state, uint32_t queueFamilyIndex) {
89     SkASSERT(state->backend() == BackendApi::kVulkan);
90     get_and_cast_data(state)->fQueueFamilyIndex = queueFamilyIndex;
91 }
92 
93 }  // namespace skgpu::MutableTextureStates
94