mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +00:00
[vk] require VK_KHR_maintenance1 (in preparation for creating 2D texture views from slices of 3D textures)
This commit is contained in:
parent
d714e3d95a
commit
2bb8325f85
@ -1,7 +1,7 @@
|
||||
use alloc::{borrow::ToOwned as _, collections::BTreeMap, sync::Arc, vec::Vec};
|
||||
use core::ffi::CStr;
|
||||
|
||||
use ash::{amd, ext, google, khr, vk};
|
||||
use ash::{ext, google, khr, vk};
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use super::conv;
|
||||
@ -943,13 +943,8 @@ impl PhysicalDeviceProperties {
|
||||
extensions.push(khr::swapchain::NAME);
|
||||
|
||||
if self.device_api_version < vk::API_VERSION_1_1 {
|
||||
// Require either `VK_KHR_maintenance1` or `VK_AMD_negative_viewport_height`
|
||||
if self.supports_extension(khr::maintenance1::NAME) {
|
||||
extensions.push(khr::maintenance1::NAME);
|
||||
} else {
|
||||
// `VK_AMD_negative_viewport_height` is obsoleted by `VK_KHR_maintenance1` and must not be enabled alongside it
|
||||
extensions.push(amd::negative_viewport_height::NAME);
|
||||
}
|
||||
// Require `VK_KHR_maintenance1`
|
||||
extensions.push(khr::maintenance1::NAME);
|
||||
|
||||
// Optional `VK_KHR_maintenance2`
|
||||
if self.supports_extension(khr::maintenance2::NAME) {
|
||||
@ -1638,12 +1633,11 @@ impl super::Instance {
|
||||
);
|
||||
return None;
|
||||
}
|
||||
if !phd_capabilities.supports_extension(amd::negative_viewport_height::NAME)
|
||||
&& !phd_capabilities.supports_extension(khr::maintenance1::NAME)
|
||||
if !phd_capabilities.supports_extension(khr::maintenance1::NAME)
|
||||
&& phd_capabilities.device_api_version < vk::API_VERSION_1_1
|
||||
{
|
||||
log::warn!(
|
||||
"viewport Y-flip is not supported, hiding adapter: {}",
|
||||
"VK_KHR_maintenance1 is not supported, hiding adapter: {}",
|
||||
info.name
|
||||
);
|
||||
return None;
|
||||
@ -1661,8 +1655,6 @@ impl super::Instance {
|
||||
}
|
||||
|
||||
let private_caps = super::PrivateCapabilities {
|
||||
flip_y_requires_shift: phd_capabilities.device_api_version >= vk::API_VERSION_1_1
|
||||
|| phd_capabilities.supports_extension(khr::maintenance1::NAME),
|
||||
imageless_framebuffers: match phd_features.imageless_framebuffer {
|
||||
Some(features) => features.imageless_framebuffer == vk::TRUE,
|
||||
None => phd_features
|
||||
|
||||
@ -788,11 +788,7 @@ impl crate::CommandEncoder for super::CommandEncoder {
|
||||
};
|
||||
let vk_viewports = [vk::Viewport {
|
||||
x: 0.0,
|
||||
y: if self.device.private_caps.flip_y_requires_shift {
|
||||
desc.extent.height as f32
|
||||
} else {
|
||||
0.0
|
||||
},
|
||||
y: desc.extent.height as f32,
|
||||
width: desc.extent.width as f32,
|
||||
height: -(desc.extent.height as f32),
|
||||
min_depth: 0.0,
|
||||
@ -967,11 +963,7 @@ impl crate::CommandEncoder for super::CommandEncoder {
|
||||
unsafe fn set_viewport(&mut self, rect: &crate::Rect<f32>, depth_range: Range<f32>) {
|
||||
let vk_viewports = [vk::Viewport {
|
||||
x: rect.x,
|
||||
y: if self.device.private_caps.flip_y_requires_shift {
|
||||
rect.y + rect.h
|
||||
} else {
|
||||
rect.y
|
||||
},
|
||||
y: rect.y + rect.h,
|
||||
width: rect.w,
|
||||
height: -rect.h, // flip Y
|
||||
min_depth: depth_range.start,
|
||||
|
||||
@ -488,10 +488,6 @@ struct RayTracingDeviceExtensionFunctions {
|
||||
/// device geometry, but affect the code paths taken internally.
|
||||
#[derive(Clone, Debug)]
|
||||
struct PrivateCapabilities {
|
||||
/// Y-flipping is implemented with either `VK_AMD_negative_viewport_height` or `VK_KHR_maintenance1`/1.1+. The AMD extension for negative viewport height does not require a Y shift.
|
||||
///
|
||||
/// This flag is `true` if the device has `VK_KHR_maintenance1`/1.1+ and `false` otherwise (i.e. in the case of `VK_AMD_negative_viewport_height`).
|
||||
flip_y_requires_shift: bool,
|
||||
imageless_framebuffers: bool,
|
||||
image_view_usage: bool,
|
||||
timeline_semaphores: bool,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user