4
4
5
5
#include " vulkan_surface.h"
6
6
7
+ #include < fuchsia/sysmem/cpp/fidl.h>
7
8
#include < lib/async/default.h>
8
9
#include < lib/ui/scenic/cpp/commands.h>
9
10
15
16
#include " third_party/skia/include/gpu/GrBackendSemaphore.h"
16
17
#include " third_party/skia/include/gpu/GrBackendSurface.h"
17
18
#include " third_party/skia/include/gpu/GrDirectContext.h"
19
+ #include " vulkan/vulkan_core.h"
20
+ #include " vulkan/vulkan_fuchsia.h"
18
21
19
22
#define LOG_AND_RETURN (cond, msg ) \
20
23
if (cond) { \
@@ -33,6 +36,11 @@ constexpr VkImageCreateFlags kVulkanImageCreateFlags = 0;
33
36
constexpr VkImageUsageFlags kVkImageUsage =
34
37
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
35
38
VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
39
+ const VkSysmemColorSpaceFUCHSIA kSrgbColorSpace = {
40
+ .sType = VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA,
41
+ .pNext = nullptr ,
42
+ .colorSpace = static_cast <uint32_t >(fuchsia::sysmem::ColorSpaceType::SRGB),
43
+ };
36
44
37
45
} // namespace
38
46
@@ -45,7 +53,7 @@ bool VulkanSurface::CreateVulkanImage(vulkan::VulkanProvider& vulkan_provider,
45
53
FML_CHECK (out_vulkan_image != nullptr );
46
54
47
55
out_vulkan_image->vk_collection_image_create_info = {
48
- .sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIAX ,
56
+ .sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA ,
49
57
.pNext = nullptr ,
50
58
.collection = collection_,
51
59
.index = 0 ,
@@ -70,10 +78,42 @@ bool VulkanSurface::CreateVulkanImage(vulkan::VulkanProvider& vulkan_provider,
70
78
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
71
79
};
72
80
81
+ const VkImageFormatConstraintsInfoFUCHSIA format_constraints = {
82
+ .sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA,
83
+ .pNext = nullptr ,
84
+ .imageCreateInfo = out_vulkan_image->vk_image_create_info ,
85
+ .requiredFormatFeatures = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,
86
+ .flags = {},
87
+ .sysmemPixelFormat = {},
88
+ .colorSpaceCount = 1 ,
89
+ .pColorSpaces = &kSrgbColorSpace ,
90
+ };
91
+
92
+ const VkImageConstraintsInfoFUCHSIA image_constraints = {
93
+ .sType = VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA,
94
+ .pNext = nullptr ,
95
+ .formatConstraintsCount = 1 ,
96
+ .pFormatConstraints = &format_constraints,
97
+ .bufferCollectionConstraints =
98
+ {
99
+ .sType =
100
+ VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA,
101
+ .pNext = nullptr ,
102
+ .minBufferCount = 1 ,
103
+ // Using the default value 0 means that we don't have any other
104
+ // constraints except for the minimum buffer count.
105
+ .maxBufferCount = 0 ,
106
+ .minBufferCountForCamping = 0 ,
107
+ .minBufferCountForDedicatedSlack = 0 ,
108
+ .minBufferCountForSharedSlack = 0 ,
109
+ },
110
+ .flags = {},
111
+ };
112
+
73
113
if (VK_CALL_LOG_ERROR (
74
- vulkan_provider.vk ().SetBufferCollectionConstraintsFUCHSIAX (
75
- vulkan_provider.vk_device (), collection_,
76
- &out_vulkan_image-> vk_image_create_info )) != VK_SUCCESS) {
114
+ vulkan_provider.vk ().SetBufferCollectionImageConstraintsFUCHSIA (
115
+ vulkan_provider.vk_device (), collection_, &image_constraints)) !=
116
+ VK_SUCCESS) {
77
117
return false ;
78
118
}
79
119
@@ -278,22 +318,22 @@ bool VulkanSurface::AllocateDeviceMemory(
278
318
});
279
319
}
280
320
281
- VkBufferCollectionCreateInfoFUCHSIAX import_info{
282
- .sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIAX ,
321
+ VkBufferCollectionCreateInfoFUCHSIA import_info{
322
+ .sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA ,
283
323
.pNext = nullptr ,
284
324
.collectionToken = vulkan_token.Unbind ().TakeChannel ().release (),
285
325
};
286
- VkBufferCollectionFUCHSIAX collection;
287
- if (VK_CALL_LOG_ERROR (vulkan_provider_.vk ().CreateBufferCollectionFUCHSIAX (
326
+ VkBufferCollectionFUCHSIA collection;
327
+ if (VK_CALL_LOG_ERROR (vulkan_provider_.vk ().CreateBufferCollectionFUCHSIA (
288
328
vulkan_provider_.vk_device (), &import_info, nullptr , &collection)) !=
289
329
VK_SUCCESS) {
290
330
return false ;
291
331
}
292
332
293
- collection_ = vulkan::VulkanHandle<VkBufferCollectionFUCHSIAX_T *>{
294
- collection, [&vulkan_provider = vulkan_provider_](
295
- VkBufferCollectionFUCHSIAX collection) {
296
- vulkan_provider.vk ().DestroyBufferCollectionFUCHSIAX (
333
+ collection_ = vulkan::VulkanHandle<VkBufferCollectionFUCHSIA_T *>{
334
+ collection, [&vulkan_provider =
335
+ vulkan_provider_](VkBufferCollectionFUCHSIA collection) {
336
+ vulkan_provider.vk ().DestroyBufferCollectionFUCHSIA (
297
337
vulkan_provider.vk_device (), collection, nullptr );
298
338
}};
299
339
@@ -306,17 +346,17 @@ bool VulkanSurface::AllocateDeviceMemory(
306
346
vulkan_image_.vk_memory_requirements ;
307
347
VkImageCreateInfo& image_create_info = vulkan_image_.vk_image_create_info ;
308
348
309
- VkBufferCollectionPropertiesFUCHSIAX properties{
310
- .sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIAX };
349
+ VkBufferCollectionPropertiesFUCHSIA properties{
350
+ .sType = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA };
311
351
if (VK_CALL_LOG_ERROR (
312
- vulkan_provider_.vk ().GetBufferCollectionPropertiesFUCHSIAX (
352
+ vulkan_provider_.vk ().GetBufferCollectionPropertiesFUCHSIA (
313
353
vulkan_provider_.vk_device (), collection_, &properties)) !=
314
354
VK_SUCCESS) {
315
355
return false ;
316
356
}
317
357
318
- VkImportMemoryBufferCollectionFUCHSIAX import_memory_info = {
319
- .sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIAX ,
358
+ VkImportMemoryBufferCollectionFUCHSIA import_memory_info = {
359
+ .sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA ,
320
360
.pNext = nullptr ,
321
361
.collection = collection_,
322
362
.index = 0 ,
0 commit comments