fix queue selection

This commit is contained in:
Matthew 2025-11-15 19:00:25 +11:00
parent ee6797c69e
commit 9c52d3aa71

View File

@ -2698,45 +2698,32 @@ Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
} }
else else
{ {
bool sparse = false, tfer_only = false; bool sparse = false;
foreach(i, prop; properties) foreach(i, prop; properties)
{ {
i32 idx = cast(i32)i;
b32 surface_support; b32 surface_support;
vkGetPhysicalDeviceSurfaceSupportKHR(dev, cast(u32)i, vk.surface, &surface_support); vkGetPhysicalDeviceSurfaceSupportKHR(dev, cast(u32)i, vk.surface, &surface_support);
if(current.gfx_index < 0 && surface_support && prop.queueFlags & G_BIT) if(current.gfx_index < 0 && surface_support && prop.queueFlags & G_BIT)
{ {
current.gfx_index = cast(i32)i; current.gfx_index = idx;
continue; continue;
} }
if(prop.queueFlags & (T_BIT | S_BIT) && !(prop.queueFlags & (G_BIT | C_BIT))) if(prop.queueFlags & (T_BIT | S_BIT))
{ {
sparse = true; sparse = true;
tfer_only = true; current.tfer_index = idx;
current.tfer_index = cast(i32)i;
continue; continue;
} }
if(!(sparse && tfer_only) && prop.queueFlags & (T_BIT | S_BIT)) if(!sparse && prop.queueFlags & T_BIT)
{ {
sparse = true; current.tfer_index = idx;
current.tfer_index = cast(i32)i;
continue; continue;
} }
if(!sparse && !(prop.queueFlags & T_BIT) && prop.queueFlags & C_BIT)
{
tfer_only = true;
current.tfer_index = cast(i32)i;
continue;
}
if(!sparse && !tfer_only && prop.queueFlags & C_BIT)
{
current.tfer_index = cast(i32)i;
}
} }
if(current.tfer_index < 0) if(current.tfer_index < 0)
@ -2757,7 +2744,7 @@ Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
VkPhysicalDeviceProperties props; VkPhysicalDeviceProperties props;
vkGetPhysicalDeviceProperties(dev, &props); vkGetPhysicalDeviceProperties(dev, &props);
if(VK_API_VERSION_MINOR(props.apiVersion) >= 3) if(VK_API_VERSION_MINOR(props.apiVersion) >= 2)
{ {
u32 ext_count; u32 ext_count;
vkEnumerateDeviceExtensionProperties(dev, null, &ext_count, null); vkEnumerateDeviceExtensionProperties(dev, null, &ext_count, null);
@ -2788,7 +2775,12 @@ Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
} }
} }
if((discrete_candidate && !discrete) || !result) if(discrete_candidate && !discrete)
{
continue;
}
if(!result)
{ {
continue; continue;
} }
@ -2831,11 +2823,6 @@ Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
discrete_candidate = cast(bool)discrete; discrete_candidate = cast(bool)discrete;
candidate = current; candidate = current;
physical_device = dev; physical_device = dev;
if(discrete_candidate && !candidate.single_queue)
{
continue;
}
} }
if(physical_device) if(physical_device)