@@ -123,16 +123,24 @@ impl GpuContext { |
| 123 | window: u32, | 123 | window: u32, |
| 124 | width: u32, | 124 | width: u32, |
| 125 | height: u32, | 125 | height: u32, |
| | 126 | + renderer: &crate::config::Renderer, |
| 126 | ) -> Result<Self, GpuError> { | 127 | ) -> Result<Self, GpuError> { |
| 127 | // Open Xlib display for wgpu | 128 | // Open Xlib display for wgpu |
| 128 | let xlib_display = XlibDisplay::open()?; | 129 | let xlib_display = XlibDisplay::open()?; |
| 129 | let display = xlib_display.display_ptr(); | 130 | let display = xlib_display.display_ptr(); |
| 130 | let screen = xlib_display.default_screen(); | 131 | let screen = xlib_display.default_screen(); |
| 131 | | 132 | |
| 132 | - // Try Vulkan first (higher texture limits), fall back to GL | 133 | + use crate::config::Renderer; |
| 133 | - // GL has a 2048 texture limit on some systems which breaks full-screen windows | 134 | + let (backends, force_fallback) = match renderer { |
| | 135 | + Renderer::Vulkan => (wgpu::Backends::VULKAN, false), |
| | 136 | + Renderer::Gl => (wgpu::Backends::GL, false), |
| | 137 | + Renderer::Software => (wgpu::Backends::VULKAN | wgpu::Backends::GL, true), |
| | 138 | + Renderer::Auto => (wgpu::Backends::VULKAN | wgpu::Backends::GL, false), |
| | 139 | + }; |
| | 140 | + tracing::info!("Renderer config: {:?} (backends: {:?}, fallback: {})", renderer, backends, force_fallback); |
| | 141 | + |
| 134 | let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor { | 142 | let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor { |
| 135 | - backends: wgpu::Backends::VULKAN | wgpu::Backends::GL, | 143 | + backends, |
| 136 | ..Default::default() | 144 | ..Default::default() |
| 137 | }); | 145 | }); |
| 138 | | 146 | |
@@ -144,7 +152,7 @@ impl GpuContext { |
| 144 | .request_adapter(&wgpu::RequestAdapterOptions { | 152 | .request_adapter(&wgpu::RequestAdapterOptions { |
| 145 | power_preference: wgpu::PowerPreference::LowPower, | 153 | power_preference: wgpu::PowerPreference::LowPower, |
| 146 | compatible_surface: Some(&surface), | 154 | compatible_surface: Some(&surface), |
| 147 | - force_fallback_adapter: false, | 155 | + force_fallback_adapter: force_fallback, |
| 148 | }) | 156 | }) |
| 149 | .await | 157 | .await |
| 150 | .ok_or(GpuError::NoAdapter)?; | 158 | .ok_or(GpuError::NoAdapter)?; |