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