@@ -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;
0 commit comments