Flutter Engine
The Flutter Engine
third_party
skia
include
gpu
graphite
BackendTexture.h
Go to the documentation of this file.
1
/*
2
* Copyright 2021 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_BackendTexture_DEFINED
9
#define skgpu_graphite_BackendTexture_DEFINED
10
11
#include "
include/core/SkRefCnt.h
"
12
#include "
include/core/SkSize.h
"
13
#include "
include/gpu/graphite/GraphiteTypes.h
"
14
#include "
include/gpu/graphite/TextureInfo.h
"
15
16
#ifdef SK_DAWN
17
#include "
include/gpu/graphite/dawn/DawnTypes.h
"
18
#endif
19
20
#ifdef SK_METAL
21
#include "
include/gpu/graphite/mtl/MtlGraphiteTypes.h
"
22
#endif
23
24
#ifdef SK_VULKAN
25
#include "
include/gpu/vk/VulkanTypes.h
"
26
#include "
include/private/gpu/vk/SkiaVulkan.h
"
27
#endif
28
29
namespace
skgpu
{
30
class
MutableTextureState;
31
}
32
33
namespace
skgpu::graphite
{
34
35
class
SK_API
BackendTexture
{
36
public
:
37
BackendTexture
();
38
#ifdef SK_DAWN
39
// Create a BackendTexture from a WGPUTexture. Texture info will be queried from the texture.
40
//
41
// This is the recommended way of specifying a BackendTexture for Dawn. See the note below on
42
// the constructor that takes a WGPUTextureView for a fuller explanation.
43
//
44
// The BackendTexture will not call retain or release on the passed in WGPUTexture. Thus, the
45
// client must keep the WGPUTexture valid until they are no longer using the BackendTexture.
46
// However, any SkImage or SkSurface that wraps the BackendTexture *will* retain and release
47
// the WGPUTexture.
48
BackendTexture
(WGPUTexture
texture
);
49
50
// Create a BackendTexture from a WGPUTexture. Texture planeDimensions, plane aspect and
51
// info have to be provided. This is intended to be used only when accessing a plane
52
// of a WGPUTexture.
53
//
54
// The BackendTexture will not call retain or release on the passed in WGPUTexture. Thus, the
55
// client must keep the WGPUTexture valid until they are no longer using the BackendTexture.
56
// However, any SkImage or SkSurface that wraps the BackendTexture *will* retain and release
57
// the WGPUTexture.
58
BackendTexture
(
SkISize
planeDimensions,
const
DawnTextureInfo
&
info
, WGPUTexture
texture
);
59
60
// Create a BackendTexture from a WGPUTextureView. Texture dimensions and
61
// info have to be provided.
62
//
63
// Using a WGPUTextureView rather than a WGPUTexture is less effecient for operations that
64
// require buffer transfers to or from the texture (e.g. methods on graphite::Context that read
65
// pixels or SkSurface::writePixels). In such cases an intermediate copy to or from a
66
// WGPUTexture is required. Thus, it is recommended to use this functionality only for cases
67
// where a WGPUTexture is unavailable, in particular when using wgpu::SwapChain.
68
//
69
// The BackendTexture will not call retain or release on the passed in WGPUTextureView. Thus,
70
// the client must keep the WGPUTextureView valid until they are no longer using the
71
// BackendTexture. However, any SkImage or SkSurface that wraps the BackendTexture *will* retain
72
// and release the WGPUTextureView.
73
BackendTexture
(
SkISize
dimensions,
const
DawnTextureInfo
&
info
, WGPUTextureView textureView);
74
#endif
75
#ifdef SK_METAL
76
// The BackendTexture will not call retain or release on the passed in CFTypeRef. Thus the
77
// client must keep the CFTypeRef valid until they are no longer using the BackendTexture.
78
BackendTexture
(
SkISize
dimensions, CFTypeRef mtlTexture);
79
#endif
80
81
#ifdef SK_VULKAN
82
BackendTexture
(
SkISize
dimensions,
83
const
VulkanTextureInfo
&,
84
VkImageLayout
,
85
uint32_t queueFamilyIndex,
86
VkImage,
87
VulkanAlloc
);
88
#endif
89
90
BackendTexture
(
const
BackendTexture
&);
91
92
~BackendTexture
();
93
94
BackendTexture
& operator=(
const
BackendTexture
&);
95
96
bool
operator==
(
const
BackendTexture
&)
const
;
97
bool
operator!=
(
const
BackendTexture
& that)
const
{
return
!(*
this
== that); }
98
99
bool
isValid
()
const
{
return
fInfo.isValid(); }
100
BackendApi
backend
()
const
{
return
fInfo.backend(); }
101
102
SkISize
dimensions
()
const
{
return
fDimensions; }
103
104
const
TextureInfo
&
info
()
const
{
return
fInfo; }
105
106
// If the client changes any of the mutable backend of the GrBackendTexture they should call
107
// this function to inform Skia that those values have changed. The backend API specific state
108
// that can be set from this function are:
109
//
110
// Vulkan: VkImageLayout and QueueFamilyIndex
111
void
setMutableState(
const
skgpu::MutableTextureState
&);
112
113
#ifdef SK_DAWN
114
WGPUTexture getDawnTexturePtr()
const
;
115
WGPUTextureView getDawnTextureViewPtr()
const
;
116
#endif
117
#ifdef SK_METAL
118
CFTypeRef getMtlTexture()
const
;
119
#endif
120
121
#ifdef SK_VULKAN
122
VkImage getVkImage()
const
;
123
VkImageLayout
getVkImageLayout()
const
;
124
uint32_t getVkQueueFamilyIndex()
const
;
125
const
VulkanAlloc
* getMemoryAlloc()
const
;
126
#endif
127
128
private
:
129
friend
class
VulkanResourceProvider
;
// for getMutableState
130
sk_sp<MutableTextureState>
getMutableState()
const
;
131
132
SkISize
fDimensions;
133
TextureInfo
fInfo;
134
135
sk_sp<MutableTextureState>
fMutableState;
136
137
#ifdef SK_VULKAN
138
// fMemoryAlloc == VulkanAlloc() if the client has already created their own VkImage and
139
// will destroy it themselves as opposed to having Skia create/destroy it via
140
// Recorder::createBackendTexture and Context::deleteBackendTexture.
141
VulkanAlloc
fMemoryAlloc =
VulkanAlloc
();
142
#endif
143
144
union
{
145
#ifdef SK_DAWN
146
struct
{
147
WGPUTexture fDawnTexture;
148
WGPUTextureView fDawnTextureView;
149
};
150
#endif
151
#ifdef SK_METAL
152
CFTypeRef fMtlTexture;
153
#endif
154
#ifdef SK_VULKAN
155
VkImage fVkImage =
VK_NULL_HANDLE
;
156
#endif
157
void
*
fEnsureUnionNonEmpty
;
158
};
159
};
160
161
}
// namespace skgpu::graphite
162
163
#endif
// skgpu_graphite_BackendTexture_DEFINED
164
info
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition:
DM.cpp:213
DawnTypes.h
GraphiteTypes.h
MtlGraphiteTypes.h
SK_API
#define SK_API
Definition:
SkAPI.h:35
SkRefCnt.h
SkSize.h
SkiaVulkan.h
TextureInfo.h
VulkanTypes.h
sk_sp
Definition:
SkRefCnt.h:220
skgpu::MutableTextureState
Definition:
MutableTextureState.h:30
skgpu::graphite::BackendTexture
Definition:
BackendTexture.h:35
skgpu::graphite::BackendTexture::isValid
bool isValid() const
Definition:
BackendTexture.h:99
skgpu::graphite::BackendTexture::~BackendTexture
~BackendTexture()
skgpu::graphite::BackendTexture::operator!=
bool operator!=(const BackendTexture &that) const
Definition:
BackendTexture.h:97
skgpu::graphite::BackendTexture::BackendTexture
BackendTexture()
skgpu::graphite::BackendTexture::info
const TextureInfo & info() const
Definition:
BackendTexture.h:104
skgpu::graphite::BackendTexture::backend
BackendApi backend() const
Definition:
BackendTexture.h:100
skgpu::graphite::BackendTexture::fEnsureUnionNonEmpty
void * fEnsureUnionNonEmpty
Definition:
BackendTexture.h:157
skgpu::graphite::BackendTexture::dimensions
SkISize dimensions() const
Definition:
BackendTexture.h:102
skgpu::graphite::TextureInfo
Definition:
TextureInfo.h:31
skgpu::graphite::VulkanResourceProvider
Definition:
VulkanResourceProvider.h:34
texture
FlTexture * texture
Definition:
mock_texture_registrar.cc:24
fml::operator==
bool operator==(C p1, const scoped_nsprotocol< C > &p2)
Definition:
scoped_nsobject.h:142
skgpu::graphite
Definition:
BoundsManagerBench.cpp:27
skgpu
Definition:
GpuTools.h:21
skgpu::BackendApi
BackendApi
Definition:
GpuTypes.h:22
SkISize
Definition:
SkSize.h:16
skgpu::VulkanAlloc
Definition:
VulkanTypes.h:37
skgpu::graphite::DawnTextureInfo
Definition:
DawnTypes.h:16
skgpu::graphite::VulkanTextureInfo
Definition:
VulkanGraphiteTypes.h:16
VkImageLayout
VkImageLayout
Definition:
vulkan_core.h:1330
VK_NULL_HANDLE
#define VK_NULL_HANDLE
Definition:
vulkan_core.h:46
Generated on Sun Jun 23 2024 21:56:02 for Flutter Engine by
1.9.4