xref: /aosp_15_r20/external/skia/src/gpu/graphite/vk/VulkanImageView.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2023 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #ifndef skgpu_graphite_VulkanImageView_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_VulkanImageView_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/vk/VulkanTypes.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/Resource.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/vk/VulkanYcbcrConversion.h"
14*c8dee2aaSAndroid Build Coastguard Worker 
15*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite {
16*c8dee2aaSAndroid Build Coastguard Worker 
17*c8dee2aaSAndroid Build Coastguard Worker class VulkanSharedContext;
18*c8dee2aaSAndroid Build Coastguard Worker class VulkanResourceProvider;
19*c8dee2aaSAndroid Build Coastguard Worker 
20*c8dee2aaSAndroid Build Coastguard Worker /*
21*c8dee2aaSAndroid Build Coastguard Worker  * VulkanImageView is not derived from Resource as its lifetime is dependent on the lifetime of
22*c8dee2aaSAndroid Build Coastguard Worker  * its associated VulkanTexture. Hence VulkanTexture will act as a container for its ImageViews
23*c8dee2aaSAndroid Build Coastguard Worker  * w.r.t. the ResourceCache and CommandBuffer, and is responsible for deleting its ImageView
24*c8dee2aaSAndroid Build Coastguard Worker  * children when freeGpuData() is called.
25*c8dee2aaSAndroid Build Coastguard Worker  */
26*c8dee2aaSAndroid Build Coastguard Worker class VulkanImageView {
27*c8dee2aaSAndroid Build Coastguard Worker public:
28*c8dee2aaSAndroid Build Coastguard Worker     enum class Usage {
29*c8dee2aaSAndroid Build Coastguard Worker         kShaderInput,
30*c8dee2aaSAndroid Build Coastguard Worker         kAttachment
31*c8dee2aaSAndroid Build Coastguard Worker     };
32*c8dee2aaSAndroid Build Coastguard Worker 
33*c8dee2aaSAndroid Build Coastguard Worker     static std::unique_ptr<const VulkanImageView> Make(
34*c8dee2aaSAndroid Build Coastguard Worker             const VulkanSharedContext* sharedContext,
35*c8dee2aaSAndroid Build Coastguard Worker             VkImage image,
36*c8dee2aaSAndroid Build Coastguard Worker             VkFormat format,
37*c8dee2aaSAndroid Build Coastguard Worker             Usage usage,
38*c8dee2aaSAndroid Build Coastguard Worker             uint32_t miplevels,
39*c8dee2aaSAndroid Build Coastguard Worker             sk_sp<VulkanYcbcrConversion>);
40*c8dee2aaSAndroid Build Coastguard Worker     ~VulkanImageView();
41*c8dee2aaSAndroid Build Coastguard Worker 
imageView()42*c8dee2aaSAndroid Build Coastguard Worker     VkImageView imageView() const { return fImageView; }
usage()43*c8dee2aaSAndroid Build Coastguard Worker     Usage usage() const { return fUsage; }
44*c8dee2aaSAndroid Build Coastguard Worker 
45*c8dee2aaSAndroid Build Coastguard Worker private:
46*c8dee2aaSAndroid Build Coastguard Worker     VulkanImageView(const VulkanSharedContext*, VkImageView, Usage, sk_sp<VulkanYcbcrConversion>);
47*c8dee2aaSAndroid Build Coastguard Worker 
48*c8dee2aaSAndroid Build Coastguard Worker     // Since we're not derived from Resource we need to store the context for deletion later
49*c8dee2aaSAndroid Build Coastguard Worker     const VulkanSharedContext* fSharedContext;
50*c8dee2aaSAndroid Build Coastguard Worker     VkImageView  fImageView;
51*c8dee2aaSAndroid Build Coastguard Worker     Usage fUsage;
52*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<VulkanYcbcrConversion> fYcbcrConversion;
53*c8dee2aaSAndroid Build Coastguard Worker };
54*c8dee2aaSAndroid Build Coastguard Worker 
55*c8dee2aaSAndroid Build Coastguard Worker }  // namespace skgpu::graphite
56*c8dee2aaSAndroid Build Coastguard Worker 
57*c8dee2aaSAndroid Build Coastguard Worker #endif  // skgpu_graphite_VulkanImageView_DEFINED
58