Coverage Report

Created: 2024-09-14 07:19

/src/skia/src/gpu/graphite/Image_YUVA_Graphite.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2023 Google LLC
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 skgpu_graphite_Image_YUVA_Graphite_DEFINED
9
#define skgpu_graphite_Image_YUVA_Graphite_DEFINED
10
11
#include "include/core/SkYUVAInfo.h"
12
#include "src/gpu/graphite/Image_Base_Graphite.h"
13
#include "src/gpu/graphite/TextureProxyView.h"
14
15
#include <functional>
16
17
namespace skgpu::graphite {
18
19
class Recorder;
20
21
class Image_YUVA final : public Image_Base {
22
public:
23
    ~Image_YUVA() override;
24
25
    // Create an Image_YUVA by interpreting the multiple 'planes' using 'yuvaInfo'. If the info
26
    // or provided plane proxies do not produce a valid mulitplane image, null is returned.
27
    static sk_sp<Image_YUVA> Make(const Caps* caps,
28
                                  const SkYUVAInfo& yuvaInfo,
29
                                  SkSpan<TextureProxyView> planes,
30
                                  sk_sp<SkColorSpace> imageColorSpace);
31
32
    // Wraps the Graphite-backed Image planes into a YUV[A] image. The returned image shares
33
    // textures as well as any links to Devices that might modify those textures.
34
    static sk_sp<Image_YUVA> WrapImages(const Caps* caps,
35
                                        const SkYUVAInfo& yuvaInfo,
36
                                        SkSpan<const sk_sp<SkImage>> images,
37
                                        sk_sp<SkColorSpace> imageColorSpace);
38
39
0
    SkImage_Base::Type type() const override { return SkImage_Base::Type::kGraphiteYUVA; }
40
41
    size_t textureSize() const override;
42
43
0
    bool onHasMipmaps() const override { return fMipmapped == Mipmapped::kYes; }
44
45
0
    bool onIsProtected() const override { return fProtected == Protected::kYes; }
46
47
    sk_sp<SkImage> onReinterpretColorSpace(sk_sp<SkColorSpace>) const override;
48
49
    // Returns the proxy view that provides value for the YUVA channel specified by 'channelIndex'.
50
    // The view of the returned proxy applies a swizzle to map the relevant data channel into all
51
    // slots of the sample value. The alpha proxy may be null.
52
0
    const TextureProxyView& proxyView(int channelIndex) const {
53
0
        SkASSERT(channelIndex >= 0 && channelIndex < SkYUVAInfo::kYUVAChannelCount);
54
0
        return fProxies[channelIndex];
55
0
    }
Unexecuted instantiation: skgpu::graphite::Image_YUVA::proxyView(int) const
Unexecuted instantiation: skgpu::graphite::Image_YUVA::proxyView(int) const
56
57
0
    std::tuple<int, int> uvSubsampleFactors() const { return fUVSubsampleFactors; }
58
59
0
    const SkYUVAInfo& yuvaInfo() const { return fYUVAInfo; }
60
61
private:
62
    // The proxy views are ordered Y,U,V,A and if the channels are held in the same plane, the
63
    // respective proxy views will share the underlying TextureProxy but have the appropriate
64
    // swizzle to access the appropriate channel and return it in the R slot.
65
    using YUVAProxies = std::array<TextureProxyView, SkYUVAInfo::kYUVAChannelCount>;
66
67
    Image_YUVA(const YUVAProxies&,
68
               const SkYUVAInfo&,
69
               sk_sp<SkColorSpace>);
70
71
    YUVAProxies fProxies;
72
    SkYUVAInfo fYUVAInfo;
73
    std::tuple<int, int> fUVSubsampleFactors;
74
75
    // Aggregate mipmap/protected status from the proxies
76
    Mipmapped fMipmapped = Mipmapped::kYes;
77
    Protected fProtected = Protected::kNo;
78
};
79
80
} // namespace skgpu::graphite
81
82
#endif // skgpu_graphite_Image_YUVA_Graphite_DEFINED