diff options
Diffstat (limited to 'adapters/fparkan-render-vulkan/src/ffi/runtime.rs')
| -rw-r--r-- | adapters/fparkan-render-vulkan/src/ffi/runtime.rs | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/adapters/fparkan-render-vulkan/src/ffi/runtime.rs b/adapters/fparkan-render-vulkan/src/ffi/runtime.rs index 134bf3e..555c08c 100644 --- a/adapters/fparkan-render-vulkan/src/ffi/runtime.rs +++ b/adapters/fparkan-render-vulkan/src/ffi/runtime.rs @@ -1,10 +1,11 @@ #![allow(unsafe_code)] use ash::vk; +use fparkan_platform::RenderRequest; use std::ffi::CString; use super::capabilities::{ - select_live_device_candidate, unique_queue_families, VulkanRuntimeCapabilityError, + select_live_device_candidate_for_request, unique_queue_families, VulkanRuntimeCapabilityError, VulkanRuntimeCapabilityProbe, }; use super::{VulkanInstanceProbe, VulkanSurfaceProbe}; @@ -125,8 +126,33 @@ pub fn create_vulkan_logical_device_probe( surface: &VulkanSurfaceProbe, drawable_extent: (u32, u32), ) -> Result<VulkanLogicalDeviceProbe, VulkanLogicalDeviceError> { - let selected = select_live_device_candidate(instance, surface, drawable_extent) - .map_err(VulkanLogicalDeviceError::Runtime)?; + create_vulkan_logical_device_probe_for_request( + instance, + surface, + drawable_extent, + &RenderRequest::conservative(), + ) +} + +/// Creates a Vulkan logical device for a specific Stage 0 render request. +/// +/// # Errors +/// +/// Returns [`VulkanLogicalDeviceError`] when runtime capability probing fails, +/// device extension names are invalid, or `vkCreateDevice` fails. +pub fn create_vulkan_logical_device_probe_for_request( + instance: &VulkanInstanceProbe, + surface: &VulkanSurfaceProbe, + drawable_extent: (u32, u32), + render_request: &RenderRequest, +) -> Result<VulkanLogicalDeviceProbe, VulkanLogicalDeviceError> { + let selected = select_live_device_candidate_for_request( + instance, + surface, + drawable_extent, + render_request, + ) + .map_err(VulkanLogicalDeviceError::Runtime)?; let capability = &selected.runtime.capability; let queue_priorities = [1.0_f32]; let queue_families = unique_queue_families( |
