mirror of
https://github.com/italicsjenga/portability.git
synced 2025-02-17 06:37:43 +11:00
Return VK_INCOMPLETE for partial physical device enumeration
This commit is contained in:
parent
014ad54760
commit
2b2cb6fefd
2 changed files with 13 additions and 5 deletions
|
@ -69,18 +69,26 @@ pub extern "C" fn gfxEnumeratePhysicalDevices(
|
|||
pPhysicalDeviceCount: *mut u32,
|
||||
pPhysicalDevices: *mut VkPhysicalDevice,
|
||||
) -> VkResult {
|
||||
let num_adapters = instance.adapters.len();
|
||||
|
||||
// If NULL, number of devices is returned.
|
||||
if pPhysicalDevices.is_null() {
|
||||
unsafe { *pPhysicalDeviceCount = instance.adapters.len() as _ };
|
||||
unsafe { *pPhysicalDeviceCount = num_adapters as _ };
|
||||
return VkResult::VK_SUCCESS;
|
||||
}
|
||||
|
||||
let output = unsafe { slice::from_raw_parts_mut(pPhysicalDevices, *pPhysicalDeviceCount as _) };
|
||||
let count = cmp::min(instance.adapters.len(), output.len());
|
||||
let num_output = output.len();
|
||||
let (code, count) = if num_output < num_adapters {
|
||||
(VkResult::VK_INCOMPLETE, num_output)
|
||||
} else {
|
||||
(VkResult::VK_SUCCESS, num_adapters)
|
||||
};
|
||||
|
||||
output.copy_from_slice(&instance.adapters[..count]);
|
||||
|
||||
unsafe { *pPhysicalDeviceCount = count as _ };
|
||||
VkResult::VK_SUCCESS
|
||||
|
||||
code
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
|
|
@ -25,7 +25,7 @@ mod impls;
|
|||
use back::Backend as B;
|
||||
use handle::{DispatchHandle, Handle};
|
||||
|
||||
use std::{cmp, slice};
|
||||
use std::{slice};
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub use impls::*;
|
||||
|
|
Loading…
Add table
Reference in a new issue