| /* |
| * Copyright 2023 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "include/gpu/vk/VulkanMutableTextureState.h" |
| |
| #include "include/gpu/GpuTypes.h" |
| #include "include/gpu/MutableTextureState.h" |
| #include "include/private/base/SkAssert.h" |
| #include "include/private/base/SkDebug.h" |
| #include "src/gpu/MutableTextureStatePriv.h" |
| #include "src/gpu/vk/VulkanMutableTextureStatePriv.h" |
| |
| namespace skgpu::MutableTextureStates { |
| |
| class VulkanMutableTextureState : public MutableTextureStateData { |
| public: |
| VulkanMutableTextureState(VkImageLayout layout, uint32_t queueFamilyIndex) |
| : fLayout(layout) |
| , fQueueFamilyIndex(queueFamilyIndex) {} |
| |
| #if defined(SK_DEBUG) |
| BackendApi type() const override { return BackendApi::kVulkan; } |
| #endif |
| |
| void copyTo(AnyStateData& formatData) const override { |
| formatData.emplace<VulkanMutableTextureState>(fLayout, fQueueFamilyIndex); |
| } |
| |
| VkImageLayout fLayout; |
| uint32_t fQueueFamilyIndex; |
| }; |
| |
| MutableTextureState MakeVulkan(VkImageLayout layout, uint32_t queueFamilyIndex) { |
| return MutableTextureStatePriv::MakeMutableTextureState( |
| BackendApi::kVulkan, |
| VulkanMutableTextureState(layout, queueFamilyIndex)); |
| } |
| |
| static const VulkanMutableTextureState* get_and_cast_data(const MutableTextureState& mts) { |
| auto data = skgpu::MutableTextureStatePriv::GetStateData(mts); |
| SkASSERT(!data || data->type() == BackendApi::kVulkan); |
| return static_cast<const VulkanMutableTextureState*>(data); |
| } |
| |
| static const VulkanMutableTextureState* get_and_cast_data(const MutableTextureState* mts) { |
| auto data = skgpu::MutableTextureStatePriv::GetStateData(mts); |
| SkASSERT(!data || data->type() == BackendApi::kVulkan); |
| return static_cast<const VulkanMutableTextureState*>(data); |
| } |
| |
| static VulkanMutableTextureState* get_and_cast_data(MutableTextureState* mts) { |
| auto data = skgpu::MutableTextureStatePriv::GetStateData(mts); |
| SkASSERT(!data || data->type() == BackendApi::kVulkan); |
| return static_cast<VulkanMutableTextureState*>(data); |
| } |
| |
| VkImageLayout GetVkImageLayout(const MutableTextureState& state) { |
| SkASSERT(state.backend() == BackendApi::kVulkan); |
| return get_and_cast_data(state)->fLayout; |
| } |
| |
| VkImageLayout GetVkImageLayout(const MutableTextureState* state) { |
| SkASSERT(state); |
| SkASSERT(state->backend() == BackendApi::kVulkan); |
| return get_and_cast_data(state)->fLayout; |
| } |
| |
| void SetVkImageLayout(MutableTextureState* state, VkImageLayout layout) { |
| SkASSERT(state->backend() == BackendApi::kVulkan); |
| get_and_cast_data(state)->fLayout = layout; |
| } |
| |
| uint32_t GetVkQueueFamilyIndex(const MutableTextureState& state) { |
| SkASSERT(state.backend() == BackendApi::kVulkan); |
| return get_and_cast_data(state)->fQueueFamilyIndex; |
| } |
| |
| uint32_t GetVkQueueFamilyIndex(const MutableTextureState* state) { |
| SkASSERT(state); |
| SkASSERT(state->backend() == BackendApi::kVulkan); |
| return get_and_cast_data(state)->fQueueFamilyIndex; |
| } |
| |
| void SetVkQueueFamilyIndex(MutableTextureState* state, uint32_t queueFamilyIndex) { |
| SkASSERT(state->backend() == BackendApi::kVulkan); |
| get_and_cast_data(state)->fQueueFamilyIndex = queueFamilyIndex; |
| } |
| |
| } // namespace skgpu::MutableTextureStates |