Skip to content

Commit d79e5e8

Browse files
committed
layers: Add VK_EXT_external_semaphore_drm_syncobj
1 parent 91d05ea commit d79e5e8

20 files changed

Lines changed: 119 additions & 9 deletions

layers/core_checks/cc_external_object.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,19 @@ bool CoreChecks::PreCallValidateImportSemaphoreFdKHR(VkDevice device, const VkIm
107107
}
108108
}
109109

110+
if (pImportSemaphoreFdInfo->handleType == VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT) {
111+
if (!enabled_features.externalSemaphoreDrmSyncobj) {
112+
skip |= LogError("VUID-VkImportSemaphoreFdInfoKHR-handleType-XXXXX", device,
113+
info_loc.dot(Field::handleType),
114+
"is VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT, but externalSemaphoreDrmSyncobj feature was not enabled.");
115+
}
116+
if (sem_state->type != VK_SEMAPHORE_TYPE_TIMELINE) {
117+
skip |= LogError("VUID-VkImportSemaphoreFdInfoKHR-handleType-XXXXX", device,
118+
info_loc.dot(Field::handleType),
119+
"semaphoreType is %s.", string_VkSemaphoreType(sem_state->type));
120+
}
121+
}
122+
110123
return skip;
111124
}
112125

layers/core_checks/cc_synchronization.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,8 +671,11 @@ bool CoreChecks::PreCallValidateCreateSemaphore(VkDevice device, const VkSemapho
671671
bool skip = false;
672672
auto sem_type_create_info = vku::FindStructInPNextChain<VkSemaphoreTypeCreateInfo>(pCreateInfo->pNext);
673673
const Location create_info_loc = error_obj.location.dot(Field::pCreateInfo);
674+
auto semaphoreType = VK_SEMAPHORE_TYPE_BINARY;
674675

675676
if (sem_type_create_info) {
677+
semaphoreType = sem_type_create_info->semaphoreType;
678+
676679
if (sem_type_create_info->semaphoreType == VK_SEMAPHORE_TYPE_TIMELINE && !enabled_features.timelineSemaphore) {
677680
skip |= LogError("VUID-VkSemaphoreTypeCreateInfo-timelineSemaphore-03252", device,
678681
create_info_loc.dot(Field::semaphoreType),
@@ -714,6 +717,18 @@ bool CoreChecks::PreCallValidateCreateSemaphore(VkDevice device, const VkSemapho
714717
string_VkExternalSemaphoreHandleTypeFlags(sem_export_info->handleTypes).c_str(),
715718
string_VkExternalSemaphoreHandleTypeFlags(external_properties.compatibleHandleTypes).c_str());
716719
}
720+
if ((sem_export_info->handleTypes & VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT) != 0) {
721+
if (!enabled_features.externalSemaphoreDrmSyncobj) {
722+
skip |= LogError("VUID-VkExportSemaphoreCreateInfo-handleTypes-XXXXX", device,
723+
create_info_loc.pNext(Struct::VkExportSemaphoreCreateInfo, Field::handleTypes),
724+
"contains VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT, but externalSemaphoreDrmSyncobj feature was not enabled.");
725+
}
726+
if (semaphoreType != VK_SEMAPHORE_TYPE_TIMELINE) {
727+
skip |= LogError("VUID-VkExportSemaphoreCreateInfo-handleTypes-XXXXX", device,
728+
create_info_loc.pNext(Struct::VkExportSemaphoreCreateInfo, Field::handleTypes),
729+
"semaphoreType is %s.", string_VkSemaphoreType(semaphoreType));
730+
}
731+
}
717732
}
718733

719734
return skip;

layers/vulkan/generated/.clang-format

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ IndentWidth: 4
1010
AccessModifierOffset: -2
1111
ColumnLimit: 132
1212
SortIncludes: false
13+
PointerAlignment: Right
14+
AllowShortBlocksOnASingleLine: Always
1315
...

layers/vulkan/generated/device_features.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1970,6 +1970,12 @@ void GetEnabledDeviceFeatures(const VkDeviceCreateInfo *pCreateInfo, DeviceFeatu
19701970
enabled->shaderMixedFloatDotProductFloat8AccFloat32 == VK_TRUE;
19711971
break;
19721972
}
1973+
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_DRM_SYNCOBJ_FEATURES_EXT: {
1974+
const VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT *enabled =
1975+
reinterpret_cast<const VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT *>(pNext);
1976+
features->externalSemaphoreDrmSyncobj |= enabled->externalSemaphoreDrmSyncobj == VK_TRUE;
1977+
break;
1978+
}
19731979
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: {
19741980
const VkPhysicalDeviceAccelerationStructureFeaturesKHR *enabled =
19751981
reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR *>(pNext);

layers/vulkan/generated/device_features.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,8 @@ struct DeviceFeatures {
350350
bool externalMemoryRDMA;
351351
// VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX
352352
bool screenBufferImport;
353+
// VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT
354+
bool externalSemaphoreDrmSyncobj;
353355
// VkPhysicalDeviceFaultFeaturesEXT
354356
bool deviceFault;
355357
// VkPhysicalDeviceFaultFeaturesEXT

layers/vulkan/generated/enum_flag_bits.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ const VkRenderPassCreateFlags AllVkRenderPassCreateFlagBits = VK_RENDER_PASS_CRE
6363
const VkMemoryAllocateFlags AllVkMemoryAllocateFlagBits = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT|VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT|VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT|VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT;
6464
const VkExternalMemoryHandleTypeFlags AllVkExternalMemoryHandleTypeFlagBits = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID|VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA|VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV|VK_EXTERNAL_MEMORY_HANDLE_TYPE_OH_NATIVE_BUFFER_BIT_OHOS|VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX|VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT;
6565
const VkExternalFenceHandleTypeFlags AllVkExternalFenceHandleTypeFlagBits = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT;
66-
const VkExternalSemaphoreHandleTypeFlags AllVkExternalSemaphoreHandleTypeFlagBits = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA;
66+
const VkExternalSemaphoreHandleTypeFlags AllVkExternalSemaphoreHandleTypeFlagBits = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_DRM_SYNCOBJ_BIT_EXT;
6767
const VkSemaphoreWaitFlags AllVkSemaphoreWaitFlagBits = VK_SEMAPHORE_WAIT_ANY_BIT;
6868
const VkDescriptorBindingFlags AllVkDescriptorBindingFlagBits = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT|VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT|VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT|VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT;
6969
const VkResolveModeFlags AllVkResolveModeFlagBits = VK_RESOLVE_MODE_NONE|VK_RESOLVE_MODE_SAMPLE_ZERO_BIT|VK_RESOLVE_MODE_AVERAGE_BIT|VK_RESOLVE_MODE_MIN_BIT|VK_RESOLVE_MODE_MAX_BIT|VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID|VK_RESOLVE_MODE_CUSTOM_BIT_EXT;

layers/vulkan/generated/error_location_helper.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,6 +1486,7 @@ const char* String(Struct structure) {
14861486
{"VkPhysicalDeviceExternalMemoryHostPropertiesEXT", 48},
14871487
{"VkPhysicalDeviceExternalMemoryRDMAFeaturesNV", 45},
14881488
{"VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX", 54},
1489+
{"VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT", 55},
14891490
{"VkPhysicalDeviceExternalSemaphoreInfo", 38},
14901491
{"VkPhysicalDeviceExternalTensorInfoARM", 38},
14911492
{"VkPhysicalDeviceFaultFeaturesEXT", 33},
@@ -2814,6 +2815,7 @@ const char* String(Field field) {
28142815
{"externalMemoryProperties", 25},
28152816
{"externalMemoryRDMA", 19},
28162817
{"externalQueue", 14},
2818+
{"externalSemaphoreDrmSyncobj", 28},
28172819
{"externalSemaphoreFeatures", 26},
28182820
{"extraCount", 11},
28192821
{"extraPrimitiveOverestimationSize", 33},
@@ -5849,6 +5851,7 @@ const char* String(Extension extension) {
58495851
{"VK_EXT_external_memory_dma_buf", 31},
58505852
{"VK_EXT_external_memory_host", 28},
58515853
{"VK_EXT_external_memory_metal", 29},
5854+
{"VK_EXT_external_semaphore_drm_syncobj", 38},
58525855
{"VK_EXT_filter_cubic", 20},
58535856
{"VK_EXT_fragment_density_map", 28},
58545857
{"VK_EXT_fragment_density_map2", 29},
@@ -9133,6 +9136,8 @@ Struct StypeToStruct(VkStructureType stype) {
91339136
return Struct::VkUbmSurfaceCreateInfoSEC;
91349137
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE:
91359138
return Struct::VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE;
9139+
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_DRM_SYNCOBJ_FEATURES_EXT:
9140+
return Struct::VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT;
91369141
case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR:
91379142
return Struct::VkAccelerationStructureGeometryTrianglesDataKHR;
91389143
case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR:

layers/vulkan/generated/error_location_helper.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,6 +1480,7 @@ enum class Struct {
14801480
VkPhysicalDeviceExternalMemoryHostPropertiesEXT,
14811481
VkPhysicalDeviceExternalMemoryRDMAFeaturesNV,
14821482
VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX,
1483+
VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT,
14831484
VkPhysicalDeviceExternalSemaphoreInfo,
14841485
VkPhysicalDeviceExternalTensorInfoARM,
14851486
VkPhysicalDeviceFaultFeaturesEXT,
@@ -2805,6 +2806,7 @@ enum class Field {
28052806
externalMemoryProperties,
28062807
externalMemoryRDMA,
28072808
externalQueue,
2809+
externalSemaphoreDrmSyncobj,
28082810
externalSemaphoreFeatures,
28092811
extraCount,
28102812
extraPrimitiveOverestimationSize,
@@ -5831,6 +5833,7 @@ enum class Extension {
58315833
_VK_EXT_external_memory_dma_buf,
58325834
_VK_EXT_external_memory_host,
58335835
_VK_EXT_external_memory_metal,
5836+
_VK_EXT_external_semaphore_drm_syncobj,
58345837
_VK_EXT_filter_cubic,
58355838
_VK_EXT_fragment_density_map,
58365839
_VK_EXT_fragment_density_map2,

layers/vulkan/generated/feature_not_present.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,6 +1326,17 @@ void Instance::ReportErrorFeatureNotPresent(VkPhysicalDevice gpu, const VkDevice
13261326
break;
13271327
}
13281328
#endif // VK_USE_PLATFORM_SCREEN_QNX
1329+
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_DRM_SYNCOBJ_FEATURES_EXT: {
1330+
VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT supported = vku::InitStructHelper();
1331+
features_2.pNext = &supported;
1332+
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
1333+
const VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT *enabling =
1334+
reinterpret_cast<const VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT *>(current);
1335+
if (enabling->externalSemaphoreDrmSyncobj && !supported.externalSemaphoreDrmSyncobj) {
1336+
ss << "VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT::externalSemaphoreDrmSyncobj is not supported\n";
1337+
}
1338+
break;
1339+
}
13291340
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT: {
13301341
VkPhysicalDeviceFaultFeaturesEXT supported = vku::InitStructHelper();
13311342
features_2.pNext = &supported;

layers/vulkan/generated/feature_requirements_helper.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2922,6 +2922,22 @@ FeatureAndName AddFeature(APIVersion api_version, vkt::Feature feature, void **i
29222922
}
29232923
#endif // VK_USE_PLATFORM_SCREEN_QNX
29242924

2925+
case Feature::externalSemaphoreDrmSyncobj: {
2926+
auto vk_struct = const_cast<VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT *>(
2927+
vku::FindStructInPNextChain<VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT>(*inout_pnext_chain));
2928+
if (!vk_struct) {
2929+
vk_struct = new VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT;
2930+
*vk_struct = vku::InitStructHelper();
2931+
if (*inout_pnext_chain) {
2932+
vvl::PnextChainAdd(*inout_pnext_chain, vk_struct);
2933+
} else {
2934+
*inout_pnext_chain = vk_struct;
2935+
}
2936+
}
2937+
return {&vk_struct->externalSemaphoreDrmSyncobj,
2938+
"VkPhysicalDeviceExternalSemaphoreDrmSyncobjFeaturesEXT::externalSemaphoreDrmSyncobj"};
2939+
}
2940+
29252941
case Feature::deviceFault: {
29262942
auto vk_struct = const_cast<VkPhysicalDeviceFaultFeaturesEXT *>(
29272943
vku::FindStructInPNextChain<VkPhysicalDeviceFaultFeaturesEXT>(*inout_pnext_chain));

0 commit comments

Comments
 (0)