blob: b05926c32a60b79c3b809ac0cc4167cf5e6ea5b4 [file] [log] [blame]
/*
* 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