diff options
| author | Valentin Popov <valentin@popov.link> | 2026-06-25 07:20:47 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-06-25 10:45:40 +0300 |
| commit | 5aff0b64e820728c9a3469445c496c38b63ec523 (patch) | |
| tree | 97fca8488f1b9d7bc420d7d3ff00d9dc61be3131 /adapters/fparkan-render-vulkan/src/ffi/runtime.rs | |
| parent | 757a975d8cad6c526f7e96cff4518434917e00fc (diff) | |
| download | fparkan-5aff0b64e820728c9a3469445c496c38b63ec523.tar.xz fparkan-5aff0b64e820728c9a3469445c496c38b63ec523.zip | |
fix(vulkan-policy): gate requested depth formats
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( |
