mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2024-12-28 02:26:16 +00:00
aux/vk: add support for optional VK_ANDROID_external_format_resolve
Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2316>
This commit is contained in:
parent
922e225794
commit
1b8b85d99d
|
@ -305,6 +305,7 @@ DEVICE_EXTENSIONS_TO_CHECK = [
|
||||||
"VK_EXT_global_priority",
|
"VK_EXT_global_priority",
|
||||||
"VK_EXT_image_drm_format_modifier",
|
"VK_EXT_image_drm_format_modifier",
|
||||||
"VK_EXT_robustness2",
|
"VK_EXT_robustness2",
|
||||||
|
"VK_ANDROID_external_format_resolve",
|
||||||
"VK_GOOGLE_display_timing",
|
"VK_GOOGLE_display_timing",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -756,6 +756,7 @@ fill_in_has_device_extensions(struct vk_bundle *vk, struct u_string_list *ext_li
|
||||||
vk->has_EXT_global_priority = false;
|
vk->has_EXT_global_priority = false;
|
||||||
vk->has_EXT_image_drm_format_modifier = false;
|
vk->has_EXT_image_drm_format_modifier = false;
|
||||||
vk->has_EXT_robustness2 = false;
|
vk->has_EXT_robustness2 = false;
|
||||||
|
vk->has_ANDROID_external_format_resolve = false;
|
||||||
vk->has_GOOGLE_display_timing = false;
|
vk->has_GOOGLE_display_timing = false;
|
||||||
|
|
||||||
const char *const *exts = u_string_list_get_data(ext_list);
|
const char *const *exts = u_string_list_get_data(ext_list);
|
||||||
|
@ -883,6 +884,13 @@ fill_in_has_device_extensions(struct vk_bundle *vk, struct u_string_list *ext_li
|
||||||
}
|
}
|
||||||
#endif // defined(VK_EXT_robustness2)
|
#endif // defined(VK_EXT_robustness2)
|
||||||
|
|
||||||
|
#if defined(VK_ANDROID_external_format_resolve)
|
||||||
|
if (strcmp(ext, VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME) == 0) {
|
||||||
|
vk->has_ANDROID_external_format_resolve = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif // defined(VK_ANDROID_external_format_resolve)
|
||||||
|
|
||||||
#if defined(VK_GOOGLE_display_timing)
|
#if defined(VK_GOOGLE_display_timing)
|
||||||
if (strcmp(ext, VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME) == 0) {
|
if (strcmp(ext, VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME) == 0) {
|
||||||
vk->has_GOOGLE_display_timing = true;
|
vk->has_GOOGLE_display_timing = true;
|
||||||
|
@ -1030,6 +1038,13 @@ filter_device_features(struct vk_bundle *vk,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_ANDROID_external_format_resolve
|
||||||
|
VkPhysicalDeviceExternalFormatResolveFeaturesANDROID ext_fmt_resolve_info = {
|
||||||
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID,
|
||||||
|
.pNext = NULL,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
VkPhysicalDeviceFeatures2 physical_device_features = {
|
VkPhysicalDeviceFeatures2 physical_device_features = {
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
|
||||||
.pNext = NULL,
|
.pNext = NULL,
|
||||||
|
@ -1056,6 +1071,13 @@ filter_device_features(struct vk_bundle *vk,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_ANDROID_external_format_resolve
|
||||||
|
if (vk->has_ANDROID_external_format_resolve) {
|
||||||
|
append_to_pnext_chain((VkBaseInStructure *)&physical_device_features,
|
||||||
|
(VkBaseInStructure *)&ext_fmt_resolve_info);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
vk->vkGetPhysicalDeviceFeatures2( //
|
vk->vkGetPhysicalDeviceFeatures2( //
|
||||||
physical_device, // physicalDevice
|
physical_device, // physicalDevice
|
||||||
&physical_device_features); // pFeatures
|
&physical_device_features); // pFeatures
|
||||||
|
@ -1079,6 +1101,10 @@ filter_device_features(struct vk_bundle *vk,
|
||||||
CHECK(synchronization_2, synchronization_2_info.synchronization2);
|
CHECK(synchronization_2, synchronization_2_info.synchronization2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_ANDROID_external_format_resolve
|
||||||
|
CHECK(ext_fmt_resolve, ext_fmt_resolve_info.externalFormatResolve);
|
||||||
|
#endif
|
||||||
|
|
||||||
CHECK(shader_image_gather_extended, physical_device_features.features.shaderImageGatherExtended);
|
CHECK(shader_image_gather_extended, physical_device_features.features.shaderImageGatherExtended);
|
||||||
|
|
||||||
CHECK(shader_storage_image_write_without_format,
|
CHECK(shader_storage_image_write_without_format,
|
||||||
|
@ -1243,6 +1269,14 @@ vk_create_device(struct vk_bundle *vk,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_ANDROID_external_format_resolve
|
||||||
|
VkPhysicalDeviceExternalFormatResolveFeaturesANDROID ext_fmt_resolve_info = {
|
||||||
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID,
|
||||||
|
.pNext = NULL,
|
||||||
|
.externalFormatResolve = device_features.ext_fmt_resolve,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
VkPhysicalDeviceFeatures enabled_features = {
|
VkPhysicalDeviceFeatures enabled_features = {
|
||||||
.shaderImageGatherExtended = device_features.shader_image_gather_extended,
|
.shaderImageGatherExtended = device_features.shader_image_gather_extended,
|
||||||
.shaderStorageImageWriteWithoutFormat = device_features.shader_storage_image_write_without_format,
|
.shaderStorageImageWriteWithoutFormat = device_features.shader_storage_image_write_without_format,
|
||||||
|
@ -1277,6 +1311,13 @@ vk_create_device(struct vk_bundle *vk,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_ANDROID_external_format_resolve
|
||||||
|
if (vk->has_ANDROID_external_format_resolve) {
|
||||||
|
append_to_pnext_chain((VkBaseInStructure *)&device_create_info,
|
||||||
|
(VkBaseInStructure *)&ext_fmt_resolve_info);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ret = vk->vkCreateDevice(vk->physical_device, &device_create_info, NULL, &vk->device);
|
ret = vk->vkCreateDevice(vk->physical_device, &device_create_info, NULL, &vk->device);
|
||||||
|
|
||||||
u_string_list_destroy(&device_ext_list);
|
u_string_list_destroy(&device_ext_list);
|
||||||
|
|
|
@ -142,6 +142,7 @@ struct vk_bundle
|
||||||
bool has_EXT_global_priority;
|
bool has_EXT_global_priority;
|
||||||
bool has_EXT_image_drm_format_modifier;
|
bool has_EXT_image_drm_format_modifier;
|
||||||
bool has_EXT_robustness2;
|
bool has_EXT_robustness2;
|
||||||
|
bool has_ANDROID_external_format_resolve;
|
||||||
bool has_GOOGLE_display_timing;
|
bool has_GOOGLE_display_timing;
|
||||||
// end of GENERATED device extension code - do not modify - used by scripts
|
// end of GENERATED device extension code - do not modify - used by scripts
|
||||||
|
|
||||||
|
@ -996,6 +997,7 @@ struct vk_device_features
|
||||||
bool null_descriptor;
|
bool null_descriptor;
|
||||||
bool timeline_semaphore;
|
bool timeline_semaphore;
|
||||||
bool synchronization_2;
|
bool synchronization_2;
|
||||||
|
bool ext_fmt_resolve;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -556,7 +556,11 @@ static const char *optional_device_extensions[] = {
|
||||||
VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME, //
|
VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME, //
|
||||||
|
|
||||||
#elif defined(XRT_GRAPHICS_SYNC_HANDLE_IS_WIN32_HANDLE) // Not optional
|
#elif defined(XRT_GRAPHICS_SYNC_HANDLE_IS_WIN32_HANDLE) // Not optional
|
||||||
|
#elif defined(XRT_GRAPHICS_BUFFER_HANDLE_IS_AHARDWAREBUFFER)
|
||||||
|
#if defined(VK_ANDROID_external_format_resolve)
|
||||||
|
// Requires Vulkan 1.3.268.1
|
||||||
|
VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME //
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#error "Need port!"
|
#error "Need port!"
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue