33// found in the LICENSE file.
44
55#include " flutter/shell/common/shell_test_platform_view_vulkan.h"
6+ #include " flutter/shell/gpu/gpu_surface_vulkan.h"
67
78namespace flutter {
89namespace testing {
@@ -29,7 +30,7 @@ void ShellTestPlatformViewVulkan::SimulateVSync() {
2930
3031// |PlatformView|
3132std::unique_ptr<Surface> ShellTestPlatformViewVulkan::CreateRenderingSurface () {
32- return std::make_unique<OffScreenSurface>(proc_table_ );
33+ return std::make_unique<GPUSurfaceVulkan>( this , nullptr , true );
3334}
3435
3536// |PlatformView|
@@ -39,128 +40,9 @@ PointerDataDispatcherMaker ShellTestPlatformViewVulkan::GetDispatcherMaker() {
3940 };
4041}
4142
42- ShellTestPlatformViewVulkan::OffScreenSurface::OffScreenSurface (
43- fml::RefPtr<vulkan::VulkanProcTable> vk)
44- : valid_(false ), vk_(std::move(vk)) {
45- if (!vk_ || !vk_->HasAcquiredMandatoryProcAddresses ()) {
46- FML_DLOG (ERROR) << " Proc table has not acquired mandatory proc addresses." ;
47- return ;
48- }
49-
50- // Create the application instance.
51- std::vector<std::string> extensions = {};
52-
53- application_ = std::make_unique<vulkan::VulkanApplication>(
54- *vk_, " FlutterTest" , std::move (extensions));
55-
56- if (!application_->IsValid () || !vk_->AreInstanceProcsSetup ()) {
57- // Make certain the application instance was created and it setup the
58- // instance proc table entries.
59- FML_DLOG (ERROR) << " Instance proc addresses have not been setup." ;
60- return ;
61- }
62-
63- // Create the device.
64-
65- logical_device_ = application_->AcquireFirstCompatibleLogicalDevice ();
66-
67- if (logical_device_ == nullptr || !logical_device_->IsValid () ||
68- !vk_->AreDeviceProcsSetup ()) {
69- // Make certain the device was created and it setup the device proc table
70- // entries.
71- FML_DLOG (ERROR) << " Device proc addresses have not been setup." ;
72- return ;
73- }
74-
75- // Create the Skia GrContext.
76- if (!CreateSkiaGrContext ()) {
77- FML_DLOG (ERROR) << " Could not create Skia context." ;
78- return ;
79- }
80-
81- valid_ = true ;
82- }
83-
84- bool ShellTestPlatformViewVulkan::OffScreenSurface::CreateSkiaGrContext () {
85- GrVkBackendContext backend_context;
86-
87- if (!CreateSkiaBackendContext (&backend_context)) {
88- FML_DLOG (ERROR) << " Could not create Skia backend context." ;
89- return false ;
90- }
91-
92- sk_sp<GrContext> context = GrContext::MakeVulkan (backend_context);
93-
94- if (context == nullptr ) {
95- FML_DLOG (ERROR) << " Failed to create GrContext" ;
96- return false ;
97- }
98-
99- context->setResourceCacheLimits (vulkan::kGrCacheMaxCount ,
100- vulkan::kGrCacheMaxByteSize );
101-
102- context_ = context;
103-
104- return true ;
105- }
106-
107- bool ShellTestPlatformViewVulkan::OffScreenSurface::CreateSkiaBackendContext (
108- GrVkBackendContext* context) {
109- auto getProc = vk_->CreateSkiaGetProc ();
110-
111- if (getProc == nullptr ) {
112- FML_DLOG (ERROR) << " GetProcAddress is null" ;
113- return false ;
114- }
115-
116- uint32_t skia_features = 0 ;
117- if (!logical_device_->GetPhysicalDeviceFeaturesSkia (&skia_features)) {
118- FML_DLOG (ERROR) << " Failed to get Physical Device features" ;
119- return false ;
120- }
121-
122- context->fInstance = application_->GetInstance ();
123- context->fPhysicalDevice = logical_device_->GetPhysicalDeviceHandle ();
124- context->fDevice = logical_device_->GetHandle ();
125- context->fQueue = logical_device_->GetQueueHandle ();
126- context->fGraphicsQueueIndex = logical_device_->GetGraphicsQueueIndex ();
127- context->fMinAPIVersion = application_->GetAPIVersion ();
128- context->fMaxAPIVersion = application_->GetAPIVersion ();
129- context->fFeatures = skia_features;
130- context->fGetProc = std::move (getProc);
131- context->fOwnsInstanceAndDevice = false ;
132- return true ;
133- }
134-
135- ShellTestPlatformViewVulkan::OffScreenSurface::~OffScreenSurface () {}
136-
137- bool ShellTestPlatformViewVulkan::OffScreenSurface::IsValid () {
138- return valid_;
139- }
140-
141- std::unique_ptr<SurfaceFrame>
142- ShellTestPlatformViewVulkan::OffScreenSurface::AcquireFrame (
143- const SkISize& size) {
144- auto image_info = SkImageInfo::Make (size, SkColorType::kRGBA_8888_SkColorType ,
145- SkAlphaType::kOpaque_SkAlphaType );
146- auto surface = SkSurface::MakeRenderTarget (context_.get (), SkBudgeted::kNo ,
147- image_info, 0 , nullptr );
148- SurfaceFrame::SubmitCallback callback =
149- [](const SurfaceFrame&, SkCanvas* canvas) -> bool { return true ; };
150-
151- return std::make_unique<SurfaceFrame>(std::move (surface), true ,
152- std::move (callback));
153- }
154-
155- GrContext* ShellTestPlatformViewVulkan::OffScreenSurface::GetContext () {
156- return context_.get ();
157- }
158-
159- SkMatrix ShellTestPlatformViewVulkan::OffScreenSurface::GetRootTransformation ()
160- const {
161- SkMatrix matrix;
162- matrix.reset ();
163- return matrix;
43+ // |GPUSurfaceVulkanDelegate|
44+ fml::RefPtr<vulkan::VulkanProcTable> ShellTestPlatformViewVulkan::vk () {
45+ return proc_table_;
16446}
16547
16648} // namespace testing
0 commit comments