Coverage Report

Created: 2024-05-20 07:14

/src/skia/include/private/gpu/ganesh/GrContext_Base.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2019 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 GrContext_Base_DEFINED
9
#define GrContext_Base_DEFINED
10
11
#include "include/core/SkRefCnt.h"
12
#include "include/gpu/GrTypes.h"
13
#include "include/private/base/SkAPI.h"
14
15
#include <cstdint>
16
17
class GrBaseContextPriv;
18
class GrCaps;
19
class GrContextThreadSafeProxy;
20
class GrDirectContext;
21
class GrImageContext;
22
class GrRecordingContext;
23
enum SkColorType : int;
24
enum class SkTextureCompressionType;
25
struct GrContextOptions;
26
class GrBackendFormat;
27
28
class GrContext_Base : public SkRefCnt {
29
public:
30
    ~GrContext_Base() override;
31
32
    /*
33
     * Safely downcast to a GrDirectContext.
34
     */
35
2.58k
    virtual GrDirectContext* asDirectContext() { return nullptr; }
36
37
    /*
38
     * The 3D API backing this context
39
     */
40
    SK_API GrBackendApi backend() const;
41
42
    /*
43
     * Retrieve the default GrBackendFormat for a given SkColorType and renderability.
44
     * It is guaranteed that this backend format will be the one used by the GrContext
45
     * SkColorType and GrSurfaceCharacterization-based createBackendTexture methods.
46
     *
47
     * The caller should check that the returned format is valid.
48
     */
49
    SK_API GrBackendFormat defaultBackendFormat(SkColorType, GrRenderable) const;
50
51
    SK_API GrBackendFormat compressedBackendFormat(SkTextureCompressionType) const;
52
53
    /**
54
     * Gets the maximum supported sample count for a color type. 1 is returned if only non-MSAA
55
     * rendering is supported for the color type. 0 is returned if rendering to this color type
56
     * is not supported at all.
57
     */
58
    SK_API int maxSurfaceSampleCountForColorType(SkColorType colorType) const;
59
60
    // TODO: When the public version is gone, rename to refThreadSafeProxy and add raw ptr ver.
61
    sk_sp<GrContextThreadSafeProxy> threadSafeProxy();
62
63
    // Provides access to functions that aren't part of the public API.
64
    GrBaseContextPriv priv();
65
    const GrBaseContextPriv priv() const;  // NOLINT(readability-const-return-type)
66
67
protected:
68
    friend class GrBaseContextPriv; // for hidden functions
69
70
    GrContext_Base(sk_sp<GrContextThreadSafeProxy>);
71
72
    virtual bool init();
73
74
    /**
75
     * An identifier for this context. The id is used by all compatible contexts. For example,
76
     * if SkImages are created on one thread using an image creation context, then fed into a
77
     * DDL Recorder on second thread (which has a recording context) and finally replayed on
78
     * a third thread with a direct context, then all three contexts will report the same id.
79
     * It is an error for an image to be used with contexts that report different ids.
80
     */
81
    uint32_t contextID() const;
82
83
87.0k
    bool matches(GrContext_Base* candidate) const {
84
87.0k
        return candidate && candidate->contextID() == this->contextID();
85
87.0k
    }
86
87
    /*
88
     * The options in effect for this context
89
     */
90
    const GrContextOptions& options() const;
91
92
    const GrCaps* caps() const;
93
    sk_sp<const GrCaps> refCaps() const;
94
95
0
    virtual GrImageContext* asImageContext() { return nullptr; }
96
0
    virtual GrRecordingContext* asRecordingContext() { return nullptr; }
97
98
    sk_sp<GrContextThreadSafeProxy>         fThreadSafeProxy;
99
100
private:
101
    using INHERITED = SkRefCnt;
102
};
103
104
#endif