blob: 868c62bf3c9f72e99bee1aa3b230b888afcbdbab [file] [log] [blame]
/*
* Copyright 2023 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_graphite_VulkanImageView_DEFINED
#define skgpu_graphite_VulkanImageView_DEFINED
#include "include/gpu/vk/VulkanTypes.h"
#include "src/gpu/graphite/Resource.h"
#include "src/gpu/graphite/vk/VulkanYcbcrConversion.h"
namespace skgpu::graphite {
class VulkanSharedContext;
class VulkanResourceProvider;
/*
* VulkanImageView is not derived from Resource as its lifetime is dependent on the lifetime of
* its associated VulkanTexture. Hence VulkanTexture will act as a container for its ImageViews
* w.r.t. the ResourceCache and CommandBuffer, and is responsible for deleting its ImageView
* children when freeGpuData() is called.
*/
class VulkanImageView {
public:
enum class Usage {
kShaderInput,
kAttachment
};
static std::unique_ptr<const VulkanImageView> Make(
const VulkanSharedContext* sharedContext,
VkImage image,
VkFormat format,
Usage usage,
uint32_t miplevels,
sk_sp<VulkanYcbcrConversion>);
~VulkanImageView();
VkImageView imageView() const { return fImageView; }
Usage usage() const { return fUsage; }
private:
VulkanImageView(const VulkanSharedContext*, VkImageView, Usage, sk_sp<VulkanYcbcrConversion>);
// Since we're not derived from Resource we need to store the context for deletion later
const VulkanSharedContext* fSharedContext;
VkImageView fImageView;
Usage fUsage;
sk_sp<VulkanYcbcrConversion> fYcbcrConversion;
};
} // namespace skgpu::graphite
#endif // skgpu_graphite_VulkanImageView_DEFINED