Skip to content

Commit 1536275

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

22 files changed

Lines changed: 2878 additions & 2524 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/command_validation.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#include "command_validation.h"
2525
#include "containers/custom_containers.h"
2626

27-
extern const char *kVUIDUndefined;
27+
extern const char* kVUIDUndefined;
2828

2929
using Func = vvl::Func;
3030
// clang-format off
@@ -2609,7 +2609,7 @@ return kCommandValidationTable;
26092609
}
26102610
// clang-format on
26112611

2612-
const CommandValidationInfo &GetCommandValidationInfo(vvl::Func command) {
2612+
const CommandValidationInfo& GetCommandValidationInfo(vvl::Func command) {
26132613
auto info_it = GetCommandValidationTable().find(command);
26142614
assert(info_it != GetCommandValidationTable().end());
26152615
return info_it->second;

layers/vulkan/generated/device_features.cpp

Lines changed: 509 additions & 503 deletions
Large diffs are not rendered by default.

layers/vulkan/generated/device_features.h

Lines changed: 3 additions & 1 deletion
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
@@ -1092,6 +1094,6 @@ struct DeviceFeatures {
10921094
bool zeroInitializeDeviceMemory;
10931095
};
10941096

1095-
void GetEnabledDeviceFeatures(const VkDeviceCreateInfo *pCreateInfo, DeviceFeatures *features, const APIVersion &api_version);
1097+
void GetEnabledDeviceFeatures(const VkDeviceCreateInfo* pCreateInfo, DeviceFeatures* features, const APIVersion& api_version);
10961098

10971099
// NOLINTEND

0 commit comments

Comments
 (0)