Flutter Engine
The Flutter Engine
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
skwindow::internal::GraphiteDawnWindowContext Class Referenceabstract

#include <GraphiteDawnWindowContext.h>

Inheritance diagram for skwindow::internal::GraphiteDawnWindowContext:
skwindow::WindowContext

Public Member Functions

 GraphiteDawnWindowContext (const DisplayParams &, wgpu::TextureFormat swapChainFormat)
 
 ~GraphiteDawnWindowContext () override
 
sk_sp< SkSurfacegetBackbufferSurface () override
 
bool isValid () override
 
void setDisplayParams (const DisplayParams &params) override
 
- Public Member Functions inherited from skwindow::WindowContext
 WindowContext (const DisplayParams &)
 
virtual ~WindowContext ()
 
virtual sk_sp< SkSurfacegetBackbufferSurface ()=0
 
void swapBuffers ()
 
virtual bool isValid ()=0
 
virtual void resize (int w, int h)=0
 
virtual void activate (bool isActive)
 
const DisplayParamsgetDisplayParams ()
 
virtual void setDisplayParams (const DisplayParams &params)=0
 
GrDirectContextdirectContext () const
 
int width () const
 
int height () const
 
SkISize dimensions () const
 
int sampleCount () const
 
int stencilBits () const
 

Protected Member Functions

bool isGpuContext () override
 
void initializeContext (int width, int height)
 
wgpu::Device createDevice (wgpu::BackendType type)
 
wgpu::SwapChain createSwapChain ()
 
void destroyContext ()
 
virtual bool onInitializeContext ()=0
 
virtual void onDestroyContext ()=0
 
virtual GrSurfaceOrigin getRTOrigin () const
 
void onSwapBuffers () override
 
virtual bool isGpuContext ()
 
virtual void onSwapBuffers ()=0
 

Protected Attributes

wgpu::TextureFormat fSwapChainFormat
 
std::unique_ptr< dawn::native::Instance > fInstance
 
wgpu::Device fDevice
 
wgpu::Queue fQueue
 
wgpu::Surface fSurface
 
wgpu::SwapChain fSwapChain
 
- Protected Attributes inherited from skwindow::WindowContext
sk_sp< GrDirectContextfContext
 
int fWidth
 
int fHeight
 
DisplayParams fDisplayParams
 
int fSampleCount = 1
 
int fStencilBits = 0
 

Detailed Description

Definition at line 16 of file GraphiteDawnWindowContext.h.

Constructor & Destructor Documentation

◆ GraphiteDawnWindowContext()

skwindow::internal::GraphiteDawnWindowContext::GraphiteDawnWindowContext ( const DisplayParams params,
wgpu::TextureFormat  swapChainFormat 
)

Definition at line 28 of file GraphiteDawnWindowContext.cpp.

31 , fSwapChainFormat(swapChainFormat) {
32 WGPUInstanceDescriptor desc{};
33 // need for WaitAny with timeout > 0
34 desc.features.timedWaitAnyEnable = true;
35 fInstance = std::make_unique<dawn::native::Instance>(&desc);
36}
WindowContext(const DisplayParams &)
std::unique_ptr< dawn::native::Instance > fInstance
const EmbeddedViewParams * params

◆ ~GraphiteDawnWindowContext()

skwindow::internal::GraphiteDawnWindowContext::~GraphiteDawnWindowContext ( )
overridedefault

Member Function Documentation

◆ createDevice()

wgpu::Device skwindow::internal::GraphiteDawnWindowContext::createDevice ( wgpu::BackendType  type)
protected

Definition at line 113 of file GraphiteDawnWindowContext.cpp.

113 {
114 DawnProcTable backendProcs = dawn::native::GetProcs();
115 dawnProcSetProcs(&backendProcs);
116
117 static constexpr const char* kAdapterToggles[] = {
118 "allow_unsafe_apis", // Needed for dual-source blending, BufferMapExtendedUsages.
119 "use_user_defined_labels_in_backend",
120 };
121 wgpu::DawnTogglesDescriptor adapterTogglesDesc;
122 adapterTogglesDesc.enabledToggleCount = std::size(kAdapterToggles);
123 adapterTogglesDesc.enabledToggles = kAdapterToggles;
124
125 wgpu::RequestAdapterOptions adapterOptions;
126 adapterOptions.backendType = type;
127 adapterOptions.nextInChain = &adapterTogglesDesc;
128
129 std::vector<dawn::native::Adapter> adapters = fInstance->EnumerateAdapters(&adapterOptions);
130 if (adapters.empty()) {
131 return nullptr;
132 }
133
134 wgpu::Adapter adapter = adapters[0].Get();
135
136 std::vector<wgpu::FeatureName> features;
137 features.push_back(wgpu::FeatureName::SurfaceCapabilities);
138 if (adapter.HasFeature(wgpu::FeatureName::MSAARenderToSingleSampled)) {
139 features.push_back(wgpu::FeatureName::MSAARenderToSingleSampled);
140 }
141 if (adapter.HasFeature(wgpu::FeatureName::TransientAttachments)) {
142 features.push_back(wgpu::FeatureName::TransientAttachments);
143 }
144 if (adapter.HasFeature(wgpu::FeatureName::Unorm16TextureFormats)) {
145 features.push_back(wgpu::FeatureName::Unorm16TextureFormats);
146 }
147 if (adapter.HasFeature(wgpu::FeatureName::DualSourceBlending)) {
148 features.push_back(wgpu::FeatureName::DualSourceBlending);
149 }
150 if (adapter.HasFeature(wgpu::FeatureName::FramebufferFetch)) {
151 features.push_back(wgpu::FeatureName::FramebufferFetch);
152 }
153 if (adapter.HasFeature(wgpu::FeatureName::BufferMapExtendedUsages)) {
154 features.push_back(wgpu::FeatureName::BufferMapExtendedUsages);
155 }
156 if (adapter.HasFeature(wgpu::FeatureName::TextureCompressionETC2)) {
157 features.push_back(wgpu::FeatureName::TextureCompressionETC2);
158 }
159 if (adapter.HasFeature(wgpu::FeatureName::TextureCompressionBC)) {
160 features.push_back(wgpu::FeatureName::TextureCompressionBC);
161 }
162 if (adapter.HasFeature(wgpu::FeatureName::R8UnormStorage)) {
163 features.push_back(wgpu::FeatureName::R8UnormStorage);
164 }
165 if (adapter.HasFeature(wgpu::FeatureName::DawnLoadResolveTexture)) {
166 features.push_back(wgpu::FeatureName::DawnLoadResolveTexture);
167 }
168
169 wgpu::DeviceDescriptor deviceDescriptor;
170 deviceDescriptor.requiredFeatures = features.data();
171 deviceDescriptor.requiredFeatureCount = features.size();
172 deviceDescriptor.deviceLostCallbackInfo.callback =
173 [](WGPUDeviceImpl *const *, WGPUDeviceLostReason reason, const char* message, void*) {
174 if (reason != WGPUDeviceLostReason_Destroyed &&
175 reason != WGPUDeviceLostReason_InstanceDropped) {
176 SK_ABORT("Device lost: %s\n", message);
177 }
178 };
179
180 wgpu::DawnTogglesDescriptor deviceTogglesDesc;
181
182 if (fDisplayParams.fDisableTintSymbolRenaming) {
183 static constexpr const char* kOptionalDeviceToggles[] = {
184 "disable_symbol_renaming",
185 };
186 deviceTogglesDesc.enabledToggleCount = std::size(kOptionalDeviceToggles);
187 deviceTogglesDesc.enabledToggles = kOptionalDeviceToggles;
188
189 // Insert the toggles descriptor ahead of any existing entries in the chain that might have
190 // been added above.
191 deviceTogglesDesc.nextInChain = deviceDescriptor.nextInChain;
192 deviceDescriptor.nextInChain = &deviceTogglesDesc;
193 }
194
195 auto device = adapter.CreateDevice(&deviceDescriptor);
196 if (!device) {
197 return nullptr;
198 }
199
200 device.SetUncapturedErrorCallback(
201 [](WGPUErrorType type, const char* message, void*) {
202 SkDebugf("Device error: %s\n", message);
203 SkASSERT(false);
204 },
205 nullptr);
206 return device;
207}
#define SK_ABORT(message,...)
Definition: SkAssert.h:70
#define SkASSERT(cond)
Definition: SkAssert.h:116
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
GLenum type
DisplayParams fDisplayParams
Definition: WindowContext.h:71
VkDevice device
Definition: main.cc:53
Win32Message message
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition: switches.h:259

◆ createSwapChain()

wgpu::SwapChain skwindow::internal::GraphiteDawnWindowContext::createSwapChain ( )
protected

Definition at line 209 of file GraphiteDawnWindowContext.cpp.

209 {
210 wgpu::SwapChainDescriptor swapChainDesc;
211 swapChainDesc.usage = wgpu::TextureUsage::RenderAttachment |
212 wgpu::TextureUsage::TextureBinding |
213 wgpu::TextureUsage::CopySrc |
214 wgpu::TextureUsage::CopyDst;
215 swapChainDesc.format = fSwapChainFormat;
216 swapChainDesc.width = fWidth;
217 swapChainDesc.height = fHeight;
218 swapChainDesc.presentMode =
219 fDisplayParams.fDisableVsync ? wgpu::PresentMode::Immediate : wgpu::PresentMode::Fifo;
220 auto swapChain = fDevice.CreateSwapChain(fSurface, &swapChainDesc);
221 SkASSERT(swapChain);
222 return swapChain;
223}

◆ destroyContext()

void skwindow::internal::GraphiteDawnWindowContext::destroyContext ( )
protected

Definition at line 70 of file GraphiteDawnWindowContext.cpp.

70 {
71 if (!fDevice.Get()) {
72 return;
73 }
74
75 this->onDestroyContext();
76
77 fGraphiteRecorder = nullptr;
78 fGraphiteContext = nullptr;
79 fSwapChain = nullptr;
80 fSurface = nullptr;
81 fDevice = nullptr;
82}

◆ getBackbufferSurface()

sk_sp< SkSurface > skwindow::internal::GraphiteDawnWindowContext::getBackbufferSurface ( )
overridevirtual

Implements skwindow::WindowContext.

Definition at line 84 of file GraphiteDawnWindowContext.cpp.

84 {
85 auto texture = fSwapChain.GetCurrentTexture();
86 skgpu::graphite::DawnTextureInfo info(/*sampleCount=*/1,
89 texture.GetUsage(),
90 wgpu::TextureAspect::All);
92 SkASSERT(this->graphiteRecorder());
93 auto surface = SkSurfaces::WrapBackendTexture(this->graphiteRecorder(),
94 backendTex,
99 return surface;
100}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition: DM.cpp:213
@ kBGRA_8888_SkColorType
pixel with 8 bits for blue, green, red, alpha; in 32-bit word
Definition: SkColorType.h:26
VkSurfaceKHR surface
Definition: main.cc:49
FlTexture * texture
SK_API sk_sp< SkSurface > WrapBackendTexture(GrRecordingContext *context, const GrBackendTexture &backendTexture, GrSurfaceOrigin origin, int sampleCnt, SkColorType colorType, sk_sp< SkColorSpace > colorSpace, const SkSurfaceProps *surfaceProps, TextureReleaseProc textureReleaseProc=nullptr, ReleaseContext releaseContext=nullptr)
SkSurfaceProps fSurfaceProps
Definition: DisplayParams.h:68
sk_sp< SkColorSpace > fColorSpace
Definition: DisplayParams.h:59

◆ getRTOrigin()

virtual GrSurfaceOrigin skwindow::internal::GraphiteDawnWindowContext::getRTOrigin ( ) const
inlineprotectedvirtual

Definition at line 33 of file GraphiteDawnWindowContext.h.

@ kTopLeft_GrSurfaceOrigin
Definition: GrTypes.h:148

◆ initializeContext()

void skwindow::internal::GraphiteDawnWindowContext::initializeContext ( int  width,
int  height 
)
protected

Definition at line 38 of file GraphiteDawnWindowContext.cpp.

38 {
40
41 fWidth = width;
43
45 return;
46
50
52 backendContext.fInstance = wgpu::Instance(fInstance->Get());
53 backendContext.fDevice = fDevice;
54 backendContext.fQueue = fDevice.GetQueue();
55 // Needed to make synchronous readPixels work:
56 fDisplayParams.fGraphiteContextOptions.fPriv.fStoreContextRefInRecorder = true;
58 backendContext, fDisplayParams.fGraphiteContextOptions.fOptions);
59 if (!fGraphiteContext) {
60 SkASSERT(false);
61 return;
62 }
63
64 fGraphiteRecorder = fGraphiteContext->makeRecorder(ToolUtils::CreateTestingRecorderOptions());
65 SkASSERT(fGraphiteRecorder);
66}
sk_sp< GrDirectContext > fContext
Definition: WindowContext.h:63
SK_API std::unique_ptr< Context > MakeDawn(const DawnBackendContext &, const ContextOptions &)

◆ isGpuContext()

bool skwindow::internal::GraphiteDawnWindowContext::isGpuContext ( )
inlineoverrideprotectedvirtual

Reimplemented from skwindow::WindowContext.

Definition at line 25 of file GraphiteDawnWindowContext.h.

25{ return true; }

◆ isValid()

bool skwindow::internal::GraphiteDawnWindowContext::isValid ( )
inlineoverridevirtual

Implements skwindow::WindowContext.

Definition at line 21 of file GraphiteDawnWindowContext.h.

21{ return SkToBool(fDevice.Get()); }
static constexpr bool SkToBool(const T &x)
Definition: SkTo.h:35

◆ onDestroyContext()

virtual void skwindow::internal::GraphiteDawnWindowContext::onDestroyContext ( )
protectedpure virtual

◆ onInitializeContext()

virtual bool skwindow::internal::GraphiteDawnWindowContext::onInitializeContext ( )
protectedpure virtual

◆ onSwapBuffers()

void skwindow::internal::GraphiteDawnWindowContext::onSwapBuffers ( )
overrideprotectedvirtual

Implements skwindow::WindowContext.

Definition at line 102 of file GraphiteDawnWindowContext.cpp.

102 {
103 this->snapRecordingAndSubmit();
104 fSwapChain.Present();
105}

◆ setDisplayParams()

void skwindow::internal::GraphiteDawnWindowContext::setDisplayParams ( const DisplayParams params)
overridevirtual

Member Data Documentation

◆ fDevice

wgpu::Device skwindow::internal::GraphiteDawnWindowContext::fDevice
protected

Definition at line 39 of file GraphiteDawnWindowContext.h.

◆ fInstance

std::unique_ptr<dawn::native::Instance> skwindow::internal::GraphiteDawnWindowContext::fInstance
protected

Definition at line 38 of file GraphiteDawnWindowContext.h.

◆ fQueue

wgpu::Queue skwindow::internal::GraphiteDawnWindowContext::fQueue
protected

Definition at line 40 of file GraphiteDawnWindowContext.h.

◆ fSurface

wgpu::Surface skwindow::internal::GraphiteDawnWindowContext::fSurface
protected

Definition at line 41 of file GraphiteDawnWindowContext.h.

◆ fSwapChain

wgpu::SwapChain skwindow::internal::GraphiteDawnWindowContext::fSwapChain
protected

Definition at line 42 of file GraphiteDawnWindowContext.h.

◆ fSwapChainFormat

wgpu::TextureFormat skwindow::internal::GraphiteDawnWindowContext::fSwapChainFormat
protected

Definition at line 37 of file GraphiteDawnWindowContext.h.


The documentation for this class was generated from the following files: