radv: Add trivial device group implementation.
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -3810,3 +3810,10 @@ void radv_CmdWaitEvents(VkCommandBuffer commandBuffer,
|
||||
RADV_CMD_FLAG_INV_VMEM_L1 |
|
||||
RADV_CMD_FLAG_INV_SMEM_L1;
|
||||
}
|
||||
|
||||
|
||||
void radv_CmdSetDeviceMask(VkCommandBuffer commandBuffer,
|
||||
uint32_t deviceMask)
|
||||
{
|
||||
/* No-op */
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -54,6 +54,8 @@ EXTENSIONS = [
|
||||
Extension('VK_KHR_bind_memory2', 1, True),
|
||||
Extension('VK_KHR_dedicated_allocation', 1, True),
|
||||
Extension('VK_KHR_descriptor_update_template', 1, True),
|
||||
Extension('VK_KHR_device_group', 1, True),
|
||||
Extension('VK_KHR_device_group_creation', 1, True),
|
||||
Extension('VK_KHR_external_fence', 1, 'device->rad_info.has_syncobj_wait_for_submit'),
|
||||
Extension('VK_KHR_external_fence_capabilities', 1, True),
|
||||
Extension('VK_KHR_external_fence_fd', 1, 'device->rad_info.has_syncobj_wait_for_submit'),
|
||||
|
@@ -53,6 +53,7 @@ static const struct nir_shader_compiler_options nir_options = {
|
||||
.lower_scmp = true,
|
||||
.lower_flrp32 = true,
|
||||
.lower_flrp64 = true,
|
||||
.lower_device_index_to_zero = true,
|
||||
.lower_fsat = true,
|
||||
.lower_fdiv = true,
|
||||
.lower_sub = true,
|
||||
@@ -203,6 +204,7 @@ radv_shader_compile_to_nir(struct radv_device *device,
|
||||
}
|
||||
const struct spirv_to_nir_options spirv_options = {
|
||||
.caps = {
|
||||
.device_group = true,
|
||||
.draw_parameters = true,
|
||||
.float64 = true,
|
||||
.image_read_without_format = true,
|
||||
|
@@ -234,3 +234,26 @@ VkResult radv_QueuePresentKHR(
|
||||
queue->queue_family_index,
|
||||
pPresentInfo);
|
||||
}
|
||||
|
||||
|
||||
VkResult radv_GetDeviceGroupPresentCapabilitiesKHR(
|
||||
VkDevice device,
|
||||
VkDeviceGroupPresentCapabilitiesKHR* pCapabilities)
|
||||
{
|
||||
memset(pCapabilities->presentMask, 0,
|
||||
sizeof(pCapabilities->presentMask));
|
||||
pCapabilities->presentMask[0] = 0x1;
|
||||
pCapabilities->modes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VkResult radv_GetDeviceGroupSurfacePresentModesKHR(
|
||||
VkDevice device,
|
||||
VkSurfaceKHR surface,
|
||||
VkDeviceGroupPresentModeFlagsKHR* pModes)
|
||||
{
|
||||
*pModes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user