aboutsummaryrefslogtreecommitdiff
path: root/adapters/fparkan-render-vulkan/src/ffi/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'adapters/fparkan-render-vulkan/src/ffi/tests.rs')
-rw-r--r--adapters/fparkan-render-vulkan/src/ffi/tests.rs37
1 files changed, 36 insertions, 1 deletions
diff --git a/adapters/fparkan-render-vulkan/src/ffi/tests.rs b/adapters/fparkan-render-vulkan/src/ffi/tests.rs
index c242d97..891789d 100644
--- a/adapters/fparkan-render-vulkan/src/ffi/tests.rs
+++ b/adapters/fparkan-render-vulkan/src/ffi/tests.rs
@@ -8,7 +8,7 @@ use crate::shader_manifest::{
TRIANGLE_VERTEX_SPIRV_PATH, TRIANGLE_VERTEX_VALIDATE_COMMAND,
};
use crate::*;
-use fparkan_platform::RenderRequest;
+use fparkan_platform::{DepthStencilSupport, RenderRequest};
use fparkan_render::{
DrawCommand, DrawId, GpuMaterialId, GpuMeshId, IndexRange, RenderCommand, RenderPhase,
};
@@ -288,6 +288,36 @@ fn rejects_missing_graphics_present_swapchain_and_format() {
}
#[test]
+fn capability_gate_rejects_devices_without_requested_depth_stencil_support() {
+ let mut no_depth = device("No depth", VulkanDeviceType::DiscreteGpu, 0, true, false);
+ no_depth.supported_depth_stencil_formats = vec![vk::Format::D32_SFLOAT.as_raw()];
+
+ assert!(matches!(
+ select_physical_device(&[no_depth]),
+ Err(VulkanCapabilityError::MissingDepthStencilFormat { .. })
+ ));
+}
+
+#[test]
+fn capability_gate_respects_request_specific_depth_profiles() {
+ let mut no_stencil = device("No stencil", VulkanDeviceType::DiscreteGpu, 0, true, false);
+ no_stencil.supported_depth_stencil_formats = vec![vk::Format::D32_SFLOAT.as_raw()];
+ let relaxed_request = RenderRequest {
+ depth: DepthStencilSupport {
+ depth_bits: 32,
+ stencil_bits: 0,
+ },
+ ..RenderRequest::conservative()
+ };
+
+ let report = select_physical_device_for_request(&[no_stencil], &relaxed_request)
+ .expect("selected device for depth-only request");
+
+ assert_eq!(report.device_name, "No stencil");
+ assert!(report.rejected_devices.is_empty());
+}
+
+#[test]
fn capability_report_json_is_stable() {
let mut rejected = device("Rejected", VulkanDeviceType::IntegratedGpu, 0, true, false);
rejected.present_modes.clear();
@@ -660,6 +690,11 @@ fn device(
vk::PresentModeKHR::MAILBOX.as_raw(),
],
surface_capabilities: default_surface_capabilities(),
+ supported_depth_stencil_formats: vec![
+ vk::Format::D24_UNORM_S8_UINT.as_raw(),
+ vk::Format::D32_SFLOAT_S8_UINT.as_raw(),
+ vk::Format::D32_SFLOAT.as_raw(),
+ ],
}
}