fix queue selection
This commit is contained in:
parent
ee6797c69e
commit
9c52d3aa71
41
vulkan.d
41
vulkan.d
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user