.KHR_shader_non_semantic_info = true,
.KHR_sampler_mirror_clamp_to_edge = true,
.KHR_storage_buffer_storage_class = true,
+ .KHR_timeline_semaphore = true,
.KHR_uniform_buffer_standard_layout = true,
#ifdef V3DV_USE_WSI_PLATFORM
.KHR_swapchain = true,
device->drm_syncobj_type.import_sync_file = NULL;
device->drm_syncobj_type.export_sync_file = NULL;
+ /* Multiwait is required for emulated timeline semaphores and is supported
+ * by the v3d kernel interface.
+ */
+ device->drm_syncobj_type.features |= VK_SYNC_FEATURE_GPU_MULTI_WAIT;
+
+ device->sync_timeline_type =
+ vk_sync_timeline_get_type(&device->drm_syncobj_type);
+
device->sync_types[0] = &device->drm_syncobj_type;
- device->sync_types[1] = NULL;
+ device->sync_types[1] = &device->sync_timeline_type.sync;
+ device->sync_types[2] = NULL;
device->vk.supported_sync_types = device->sync_types;
result = v3dv_wsi_init(device);
.storageBuffer8BitAccess = true,
.storagePushConstant8 = true,
.imagelessFramebuffer = true,
+ .timelineSemaphore = true,
};
VkPhysicalDeviceVulkan11Features vk11 = {
*/
.independentResolveNone = false,
.independentResolve = false,
+ .maxTimelineSemaphoreValueDifference = UINT64_MAX,
};
memset(vk12.driverName, 0, VK_MAX_DRIVER_NAME_SIZE_KHR);
snprintf(vk12.driverName, VK_MAX_DRIVER_NAME_SIZE_KHR, "V3DV Mesa");
#include "vk_physical_device.h"
#include "vk_shader_module.h"
#include "vk_sync.h"
+#include "vk_sync_timeline.h"
#include "vk_util.h"
#include "vk_command_buffer.h"
uint8_t driver_uuid[VK_UUID_SIZE];
struct vk_sync_type drm_syncobj_type;
- const struct vk_sync_type *sync_types[2];
+ struct vk_sync_timeline_type sync_timeline_type;
+ const struct vk_sync_type *sync_types[3];
struct disk_cache *disk_cache;