return features;
}
+void PhysicalDevice::getFeatures(VkPhysicalDeviceSamplerYcbcrConversionFeatures* features) const
+{
+ features->samplerYcbcrConversion = VK_FALSE;
+}
+
+void PhysicalDevice::getFeatures(VkPhysicalDevice16BitStorageFeatures* features) const
+{
+ features->storageBuffer16BitAccess = VK_FALSE;\r
+ features->storageInputOutput16 = VK_FALSE;\r
+ features->storagePushConstant16 = VK_FALSE;\r
+ features->uniformAndStorageBuffer16BitAccess = VK_FALSE;
+}
+
+void PhysicalDevice::getFeatures(VkPhysicalDeviceVariablePointerFeatures* features) const
+{
+ features->variablePointersStorageBuffer = VK_FALSE;\r
+ features->variablePointers = VK_FALSE;
+}
+
+void PhysicalDevice::getFeatures(VkPhysicalDevice8BitStorageFeaturesKHR* features) const
+{
+ features->storageBuffer8BitAccess = VK_FALSE;\r
+ features->uniformAndStorageBuffer8BitAccess = VK_FALSE;\r
+ features->storagePushConstant8 = VK_FALSE;
+}
+
+void PhysicalDevice::getFeatures(VkPhysicalDeviceMultiviewFeatures* features) const
+{
+ features->multiview = VK_FALSE;\r
+ features->multiviewGeometryShader = VK_FALSE;\r
+ features->multiviewTessellationShader = VK_FALSE;
+}
+
+void PhysicalDevice::getFeatures(VkPhysicalDeviceProtectedMemoryFeatures* features) const
+{
+ features->protectedMemory = VK_FALSE;
+}
+
VkSampleCountFlags PhysicalDevice::getSampleCounts() const
{
return VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT;
return properties;
}
+void PhysicalDevice::getProperties(VkPhysicalDeviceIDProperties* properties) const
+{\r
+ memcpy(properties->deviceUUID, SWIFTSHADER_UUID, VK_UUID_SIZE);\r
+ memset(properties->deviceLUID, 0, VK_LUID_SIZE);\r
+ memset(properties->driverUUID, 0, VK_UUID_SIZE);\r
+ *((uint64_t*)properties->driverUUID) = DRIVER_VERSION;\r
+ properties->deviceNodeMask = 0;\r
+ properties->deviceLUIDValid = VK_FALSE;
+}
+
+void PhysicalDevice::getProperties(VkPhysicalDeviceMaintenance3Properties* properties) const
+{
+ properties->maxMemoryAllocationSize = 1 << 31;\r
+ properties->maxPerSetDescriptors = 1024;
+}
+
+void PhysicalDevice::getProperties(VkPhysicalDeviceMultiviewProperties* properties) const
+{
+ properties->maxMultiviewInstanceIndex = (1 << 27) - 1;\r
+ properties->maxMultiviewViewCount = 6;
+}
+
+void PhysicalDevice::getProperties(VkPhysicalDevicePointClippingProperties* properties) const
+{
+ properties->pointClippingBehavior = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES;
+}
+
+void PhysicalDevice::getProperties(VkPhysicalDeviceProtectedMemoryProperties* properties) const
+{
+ properties->protectedNoFault = VK_FALSE;
+}
+
+void PhysicalDevice::getProperties(VkPhysicalDeviceSubgroupProperties* properties) const
+{
+ properties->subgroupSize = 1;\r
+ properties->supportedStages = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT | VK_SHADER_STAGE_COMPUTE_BIT;\r
+ properties->supportedOperations = VK_SUBGROUP_FEATURE_BASIC_BIT;\r
+ properties->quadOperationsInAllStages = VK_FALSE;
+}
+
bool PhysicalDevice::hasFeatures(const VkPhysicalDeviceFeatures& requestedFeatures) const
{
const VkPhysicalDeviceFeatures& availableFeatures = getFeatures();
return properties;
}
+void PhysicalDevice::getExternalBufferProperties(const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
+ VkExternalBufferProperties* pExternalBufferProperties) const
+{
+ // FIXME: currently ignoring pExternalBufferInfo
+
+ pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT;
+ pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT;
+ pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT;
+}
+
+void PhysicalDevice::getExternalFenceProperties(const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
+ VkExternalFenceProperties* pExternalFenceProperties) const
+{
+ // FIXME: currently ignoring pExternalFenceInfo
+
+ pExternalFenceProperties->compatibleHandleTypes = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT;
+ pExternalFenceProperties->exportFromImportedHandleTypes = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT;
+ pExternalFenceProperties->externalFenceFeatures = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT;
+}
+
+void PhysicalDevice::getExternalSemaphoreProperties(const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
+ VkExternalSemaphoreProperties* pExternalSemaphoreProperties) const
+{
+ // FIXME: currently ignoring pExternalSemaphoreInfo
+
+ pExternalSemaphoreProperties->compatibleHandleTypes = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT;
+ pExternalSemaphoreProperties->exportFromImportedHandleTypes = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT;
+ pExternalSemaphoreProperties->externalSemaphoreFeatures = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT;
+}
+
} // namespace vk
VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements)",
+ device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
+
+ vk::Cast(device)->getImageSparseMemoryRequirements(image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
}
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties)
VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkDevice device = 0x%X, uint32_t heapIndex = %d, uint32_t localDeviceIndex = %d, uint32_t remoteDeviceIndex = %d, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures = 0x%X)",
+ device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
+
+ vk::Cast(device)->getGroupPeerMemoryFeatures(heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
}
VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask)
VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("VkInstance instance = 0x%X, uint32_t* pPhysicalDeviceGroupCount = 0x%X, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties = 0x%X",
+ instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
+
+ if(!pPhysicalDeviceGroupProperties)
+ {
+ *pPhysicalDeviceGroupCount = vk::Cast(instance)->getPhysicalDeviceGroupCount();
+ }
+ else
+ {
+ vk::Cast(instance)->getPhysicalDeviceGroups(*pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
+ }
+
return VK_SUCCESS;
}
VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkDevice device = 0x%X, const VkImageMemoryRequirementsInfo2* pInfo = 0x%X, VkMemoryRequirements2* pMemoryRequirements = 0x%X)",
+ device, pInfo, pMemoryRequirements);
+
+ if(pInfo->pNext || pMemoryRequirements->pNext)
+ {
+ UNIMPLEMENTED();
+ }
+
+ vkGetImageMemoryRequirements(device, pInfo->image, &(pMemoryRequirements->memoryRequirements));
}
VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkDevice device = 0x%X, const VkBufferMemoryRequirementsInfo2* pInfo = 0x%X, VkMemoryRequirements2* pMemoryRequirements = 0x%X)",
+ device, pInfo, pMemoryRequirements);
+
+ if(pInfo->pNext || pMemoryRequirements->pNext)
+ {
+ UNIMPLEMENTED();
+ }
+
+ vkGetBufferMemoryRequirements(device, pInfo->buffer, &(pMemoryRequirements->memoryRequirements));
}
VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkDevice device = 0x%X, const VkImageSparseMemoryRequirementsInfo2* pInfo = 0x%X, uint32_t* pSparseMemoryRequirementCount = 0x%X, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements = 0x%X)",
+ device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
+
+ if(pInfo->pNext || pSparseMemoryRequirements->pNext)
+ {
+ UNIMPLEMENTED();
+ }
+
+ vkGetImageSparseMemoryRequirements(device, pInfo->image, pSparseMemoryRequirementCount, &(pSparseMemoryRequirements->memoryRequirements));
}
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures)
{
TRACE("(VkPhysicalDevice physicalDevice = 0x%X, VkPhysicalDeviceFeatures2* pFeatures = 0x%X)", physicalDevice, pFeatures);
- if(pFeatures->pNext)
+ void* pNext = pFeatures->pNext;
+ while(pNext)
{
- UNIMPLEMENTED();
+ switch(*reinterpret_cast<const VkStructureType*>(pNext))
+ {
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
+ {
+ auto& features = *reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(pNext);
+ vk::Cast(physicalDevice)->getFeatures(&features);
+ pNext = features.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
+ {
+ auto& features = *reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(pNext);
+ vk::Cast(physicalDevice)->getFeatures(&features);
+ pNext = features.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES:
+ {
+ auto& features = *reinterpret_cast<VkPhysicalDeviceVariablePointerFeatures*>(pNext);
+ vk::Cast(physicalDevice)->getFeatures(&features);
+ pNext = features.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR:
+ {
+ auto& features = *reinterpret_cast<VkPhysicalDevice8BitStorageFeaturesKHR*>(pNext);
+ vk::Cast(physicalDevice)->getFeatures(&features);
+ pNext = features.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
+ {
+ auto& features = *reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(pNext);
+ vk::Cast(physicalDevice)->getFeatures(&features);
+ pNext = features.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
+ {
+ auto& features = *reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(pNext);
+ vk::Cast(physicalDevice)->getFeatures(&features);
+ pNext = features.pNext;
+ }
+ break;
+ default:
+ // FIXME: We will eventually simply ignore unsupported pNext structures
+ UNIMPLEMENTED();
+ }
}
vkGetPhysicalDeviceFeatures(physicalDevice, &(pFeatures->features));
{
TRACE("(VkPhysicalDevice physicalDevice = 0x%X, VkPhysicalDeviceProperties2* pProperties = 0x%X)", physicalDevice, pProperties);
- if(pProperties->pNext)
+ void* pNext = pProperties->pNext;
+ while(pNext)
{
- UNIMPLEMENTED();
+ switch(*reinterpret_cast<const VkStructureType*>(pNext))
+ {
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
+ {
+ auto& properties = *reinterpret_cast<VkPhysicalDeviceIDProperties*>(pNext);
+ vk::Cast(physicalDevice)->getProperties(&properties);
+ pNext = properties.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
+ {
+ auto& properties = *reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(pNext);
+ vk::Cast(physicalDevice)->getProperties(&properties);
+ pNext = properties.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
+ {
+ auto& properties = *reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(pNext);
+ vk::Cast(physicalDevice)->getProperties(&properties);
+ pNext = properties.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
+ {
+ auto& properties = *reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(pNext);
+ vk::Cast(physicalDevice)->getProperties(&properties);
+ pNext = properties.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
+ {
+ auto& properties = *reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(pNext);
+ vk::Cast(physicalDevice)->getProperties(&properties);
+ pNext = properties.pNext;
+ }
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
+ {
+ auto& properties = *reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(pNext);
+ vk::Cast(physicalDevice)->getProperties(&properties);
+ pNext = properties.pNext;
+ }
+ break;
+ default:
+ // FIXME: We will eventually simply ignore unsupported pNext structures
+ UNIMPLEMENTED();
+ }
}
vkGetPhysicalDeviceProperties(physicalDevice, &(pProperties->properties));
TRACE("(VkPhysicalDevice physicalDevice = 0x%X, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo = 0x%X, VkImageFormatProperties2* pImageFormatProperties = 0x%X)",
physicalDevice, pImageFormatInfo, pImageFormatProperties);
- if(pImageFormatProperties->pNext)
+ if(pImageFormatInfo->pNext || pImageFormatProperties->pNext)
{
UNIMPLEMENTED();
}
TRACE("(VkPhysicalDevice physicalDevice = 0x%X, uint32_t* pQueueFamilyPropertyCount = 0x%X, VkQueueFamilyProperties2* pQueueFamilyProperties = 0x%X)",
physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
- if(!pQueueFamilyProperties)
+ if(pQueueFamilyProperties && pQueueFamilyProperties->pNext)
{
- *pQueueFamilyPropertyCount = 1;
+ UNIMPLEMENTED();
}
- else
- {
- if(pQueueFamilyProperties->pNext)
- {
- UNIMPLEMENTED();
- }
- vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, &(pQueueFamilyProperties->queueFamilyProperties));
- }
+ vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount,
+ pQueueFamilyProperties ? &(pQueueFamilyProperties->queueFamilyProperties) : nullptr);
}
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
TRACE("(VkPhysicalDevice physicalDevice = 0x%X, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo = 0x%X, uint32_t* pPropertyCount = 0x%X, VkSparseImageFormatProperties2* pProperties = 0x%X)",
physicalDevice, pFormatInfo, pPropertyCount, pProperties);
- if(!pProperties)
+ if(pProperties && pProperties->pNext)
{
- *pPropertyCount = 1;
+ UNIMPLEMENTED();
}
- else
- {
- if(pProperties->pNext)
- {
- UNIMPLEMENTED();
- }
- vkGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, pFormatInfo->format, pFormatInfo->type,
- pFormatInfo->samples, pFormatInfo->usage, pFormatInfo->tiling,
- pPropertyCount, &(pProperties->properties));
- }
+ vkGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, pFormatInfo->format, pFormatInfo->type,
+ pFormatInfo->samples, pFormatInfo->usage, pFormatInfo->tiling,
+ pPropertyCount, pProperties ? &(pProperties->properties) : nullptr);
}
VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags)
VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkDevice device = 0x%X, const VkDeviceQueueInfo2* pQueueInfo = 0x%X, VkQueue* pQueue = 0x%X)",
+ device, pQueueInfo, pQueue);
+
+ if(pQueueInfo->pNext)
+ {
+ UNIMPLEMENTED();
+ }
+
+ // The only flag that can be set here is VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT
+ // According to the Vulkan spec, 4.3.1. Queue Family Properties:
+ // "VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT specifies that the device queue is a
+ // protected-capable queue. If the protected memory feature is not enabled,
+ // the VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit of flags must not be set."
+ if(pQueueInfo->flags)
+ {
+ *pQueue = VK_NULL_HANDLE;
+ }
+ else
+ {
+ vkGetDeviceQueue(device, pQueueInfo->queueFamilyIndex, pQueueInfo->queueIndex, pQueue);
+ }
}
VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion)
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkPhysicalDevice physicalDevice = 0x%X, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo = 0x%X, VkExternalBufferProperties* pExternalBufferProperties = 0x%X)",
+ physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
+
+ vk::Cast(physicalDevice)->getExternalBufferProperties(pExternalBufferInfo, pExternalBufferProperties);
}
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkPhysicalDevice physicalDevice = 0x%X, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo = 0x%X, VkExternalFenceProperties* pExternalFenceProperties = 0x%X)",
+ physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
+
+ vk::Cast(physicalDevice)->getExternalFenceProperties(pExternalFenceInfo, pExternalFenceProperties);
}
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkPhysicalDevice physicalDevice = 0x%X, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo = 0x%X, VkExternalSemaphoreProperties* pExternalSemaphoreProperties = 0x%X)",
+ physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
+
+ vk::Cast(physicalDevice)->getExternalSemaphoreProperties(pExternalSemaphoreInfo, pExternalSemaphoreProperties);
}
VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport)
{
- TRACE("()");
- UNIMPLEMENTED();
+ TRACE("(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport)",
+ device, pCreateInfo, pSupport);
+
+ vk::Cast(device)->getDescriptorSetLayoutSupport(pCreateInfo, pSupport);
}
}