diff options
author | Bas Nieuwenhuizen <[email protected]> | 2018-01-21 17:13:26 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2018-03-07 21:18:35 +0100 |
commit | 5240fddb9dacbab57ba6a35e20b40b1c81ff71eb (patch) | |
tree | b12ac61c92bd516e033633e90a1015c5e2d95070 /src/amd/vulkan/radv_device.c | |
parent | 84e877aa7798dc2fdc55cdf936214eaea1311384 (diff) |
radv: Add trivial device group implementation.
Reviewed-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/amd/vulkan/radv_device.c')
-rw-r--r-- | src/amd/vulkan/radv_device.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index f672daff842..44154d4e7b8 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -592,6 +592,35 @@ VkResult radv_EnumeratePhysicalDevices( : VK_SUCCESS; } +VkResult radv_EnumeratePhysicalDeviceGroups( + VkInstance _instance, + uint32_t* pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) +{ + RADV_FROM_HANDLE(radv_instance, instance, _instance); + VkResult result; + + if (instance->physicalDeviceCount < 0) { + result = radv_enumerate_devices(instance); + if (result != VK_SUCCESS && + result != VK_ERROR_INCOMPATIBLE_DRIVER) + return result; + } + + if (!pPhysicalDeviceGroupProperties) { + *pPhysicalDeviceGroupCount = instance->physicalDeviceCount; + } else { + *pPhysicalDeviceGroupCount = MIN2(*pPhysicalDeviceGroupCount, instance->physicalDeviceCount); + for (unsigned i = 0; i < *pPhysicalDeviceGroupCount; ++i) { + pPhysicalDeviceGroupProperties[i].physicalDeviceCount = 1; + pPhysicalDeviceGroupProperties[i].physicalDevices[0] = radv_physical_device_to_handle(instance->physicalDevices + i); + pPhysicalDeviceGroupProperties[i].subsetAllocation = false; + } + } + return *pPhysicalDeviceGroupCount < instance->physicalDeviceCount ? VK_INCOMPLETE + : VK_SUCCESS; +} + void radv_GetPhysicalDeviceFeatures( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) @@ -4270,3 +4299,19 @@ radv_DebugReportMessageEXT(VkInstance _instance, vk_debug_report(&instance->debug_report_callbacks, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage); } + +void +radv_GetDeviceGroupPeerMemoryFeatures( + VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) +{ + assert(localDeviceIndex == remoteDeviceIndex); + + *pPeerMemoryFeatures = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT | + VK_PEER_MEMORY_FEATURE_COPY_DST_BIT | + VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT | + VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT; +} |