Coverage Report

Created: 2024-05-20 07:14

/src/skia/tools/gpu/vk/VkYcbcrSamplerHelper.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2020 Google Inc.
3
 *
4
 * Use of this source code is governed by a BSD-style license that can be
5
 * found in the LICENSE file.
6
 */
7
8
#ifndef VkYcbcrSamplerHelper_DEFINED
9
#define VkYcbcrSamplerHelper_DEFINED
10
11
#include "include/core/SkTypes.h"
12
13
#ifdef SK_VULKAN
14
15
#if defined(SK_GRAPHITE)
16
#include "include/gpu/graphite/BackendTexture.h"
17
18
namespace skgpu::graphite {
19
class Recorder;
20
class VulkanSharedContext;
21
}
22
#endif
23
24
25
#include "include/gpu/GrBackendSurface.h"
26
#include "include/gpu/vk/GrVkTypes.h"
27
28
class GrDirectContext;
29
class GrVkGpu;
30
31
// This helper will create and hold data for a Vulkan YCbCr backend texture. This format is
32
// particularly interesting because its sampler is immutable.
33
class VkYcbcrSamplerHelper {
34
public:
35
#if defined(SK_GRAPHITE)
36
    VkYcbcrSamplerHelper(const skgpu::graphite::VulkanSharedContext* ctxt,
37
                         VkPhysicalDevice physDev)
38
            : fSharedCtxt(ctxt)
39
0
            , fPhysDev(physDev) {
40
0
        SkASSERT(ctxt);
41
0
        fDContext = nullptr;
42
0
        fGrTexture = {};
43
0
    }
44
45
0
    const skgpu::graphite::BackendTexture& backendTexture() const { return fTexture; }
46
47
    bool createBackendTexture(uint32_t width, uint32_t height);
48
#endif
49
50
    VkYcbcrSamplerHelper(GrDirectContext*);
51
52
0
    const GrBackendTexture& grBackendTexture() const { return fGrTexture; }
53
54
    ~VkYcbcrSamplerHelper();
55
56
    bool isYCbCrSupported();
57
58
    bool createGrBackendTexture(uint32_t width, uint32_t height);
59
60
    static int GetExpectedY(int x, int y, int width, int height);
61
    static std::pair<int, int> GetExpectedUV(int x, int y, int width, int height);
62
63
private:
64
#if defined(SK_GRAPHITE)
65
    skgpu::graphite::BackendTexture             fTexture;
66
    const skgpu::graphite::VulkanSharedContext* fSharedCtxt;
67
    // Needed to query PhysicalDeviceFormatProperties for relevant VkFormat(s)
68
    VkPhysicalDevice                            fPhysDev;
69
#endif
70
71
    GrVkGpu* vkGpu();
72
73
    GrDirectContext* fDContext;
74
    GrBackendTexture fGrTexture;
75
76
    VkImage fImage = VK_NULL_HANDLE;
77
    VkDeviceMemory fImageMemory = VK_NULL_HANDLE;
78
};
79
80
#endif // SK_VULKAN
81
#endif // VkYcbcrSamplerHelper_DEFINED