/* * 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(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(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(data); } static VulkanMutableTextureState* get_and_cast_data(MutableTextureState* mts) { auto data = skgpu::MutableTextureStatePriv::GetStateData(mts); SkASSERT(!data || data->type() == BackendApi::kVulkan); return static_cast(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