mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
libs/vkd3d: Create a compute queue family.
This commit is contained in:
parent
c790aabb4d
commit
dadce84a4b
@ -3212,6 +3212,9 @@ static HRESULT d3d12_command_queue_init(struct d3d12_command_queue *queue,
|
|||||||
case D3D12_COMMAND_LIST_TYPE_COPY:
|
case D3D12_COMMAND_LIST_TYPE_COPY:
|
||||||
queue_family_index = device->copy_queue_family_index;
|
queue_family_index = device->copy_queue_family_index;
|
||||||
break;
|
break;
|
||||||
|
case D3D12_COMMAND_LIST_TYPE_COMPUTE:
|
||||||
|
queue_family_index = device->compute_queue_family_index;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled command list type %#x.\n", desc->Type);
|
FIXME("Unhandled command list type %#x.\n", desc->Type);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
|
@ -360,7 +360,7 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device)
|
|||||||
};
|
};
|
||||||
|
|
||||||
const struct vkd3d_vk_instance_procs *vk_procs = &device->vkd3d_instance.vk_procs;
|
const struct vkd3d_vk_instance_procs *vk_procs = &device->vkd3d_instance.vk_procs;
|
||||||
unsigned int direct_queue_family_index, copy_queue_family_index;
|
unsigned int direct_queue_family_index, copy_queue_family_index, compute_queue_family_index;
|
||||||
VkQueueFamilyProperties *queue_properties;
|
VkQueueFamilyProperties *queue_properties;
|
||||||
VkPhysicalDeviceFeatures device_features;
|
VkPhysicalDeviceFeatures device_features;
|
||||||
VkDeviceQueueCreateInfo *queue_info;
|
VkDeviceQueueCreateInfo *queue_info;
|
||||||
@ -393,6 +393,7 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device)
|
|||||||
|
|
||||||
direct_queue_family_index = ~0u;
|
direct_queue_family_index = ~0u;
|
||||||
copy_queue_family_index = ~0u;
|
copy_queue_family_index = ~0u;
|
||||||
|
compute_queue_family_index = ~0u;
|
||||||
for (i = 0; i < queue_family_count; ++i)
|
for (i = 0; i < queue_family_count; ++i)
|
||||||
{
|
{
|
||||||
static float priorities[] = {1.0f};
|
static float priorities[] = {1.0f};
|
||||||
@ -409,6 +410,8 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device)
|
|||||||
direct_queue_family_index = i;
|
direct_queue_family_index = i;
|
||||||
if (queue_properties[i].queueFlags & VK_QUEUE_TRANSFER_BIT)
|
if (queue_properties[i].queueFlags & VK_QUEUE_TRANSFER_BIT)
|
||||||
copy_queue_family_index = i;
|
copy_queue_family_index = i;
|
||||||
|
if ((queue_properties[i].queueFlags & VK_QUEUE_COMPUTE_BIT) == VK_QUEUE_COMPUTE_BIT)
|
||||||
|
compute_queue_family_index = i;
|
||||||
}
|
}
|
||||||
vkd3d_free(queue_properties);
|
vkd3d_free(queue_properties);
|
||||||
|
|
||||||
@ -424,6 +427,11 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device)
|
|||||||
vkd3d_free(queue_info);
|
vkd3d_free(queue_info);
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
if (compute_queue_family_index == ~0u)
|
||||||
|
{
|
||||||
|
/* No compute-only queue family, reuse the direct queue family with graphics and compute. */
|
||||||
|
compute_queue_family_index = direct_queue_family_index;
|
||||||
|
}
|
||||||
|
|
||||||
device->direct_queue_family_index = direct_queue_family_index;
|
device->direct_queue_family_index = direct_queue_family_index;
|
||||||
device->copy_queue_family_index = copy_queue_family_index;
|
device->copy_queue_family_index = copy_queue_family_index;
|
||||||
|
@ -394,6 +394,7 @@ struct d3d12_device
|
|||||||
|
|
||||||
unsigned int direct_queue_family_index;
|
unsigned int direct_queue_family_index;
|
||||||
unsigned int copy_queue_family_index;
|
unsigned int copy_queue_family_index;
|
||||||
|
unsigned int compute_queue_family_index;
|
||||||
VkPhysicalDeviceMemoryProperties memory_properties;
|
VkPhysicalDeviceMemoryProperties memory_properties;
|
||||||
|
|
||||||
struct vkd3d_instance vkd3d_instance;
|
struct vkd3d_instance vkd3d_instance;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user