Use best multisampling available
This commit is contained in:
parent
bf38462c78
commit
eb1bbee3eb
|
|
@ -151,7 +151,8 @@ impl<'a> State<'a> {
|
||||||
.request_device(
|
.request_device(
|
||||||
&wgpu::DeviceDescriptor {
|
&wgpu::DeviceDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
required_features: wgpu::Features::PUSH_CONSTANTS,
|
required_features: wgpu::Features::PUSH_CONSTANTS
|
||||||
|
| wgpu::Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES,
|
||||||
required_limits: wgpu::Limits {
|
required_limits: wgpu::Limits {
|
||||||
max_push_constant_size: 16,
|
max_push_constant_size: 16,
|
||||||
..wgpu::Limits::default()
|
..wgpu::Limits::default()
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ use glam::{uvec2, UVec2};
|
||||||
pub struct Viewport<'a> {
|
pub struct Viewport<'a> {
|
||||||
surface: wgpu::Surface<'a>,
|
surface: wgpu::Surface<'a>,
|
||||||
config: wgpu::SurfaceConfiguration,
|
config: wgpu::SurfaceConfiguration,
|
||||||
|
sample_count: u32,
|
||||||
multisample: Multisample,
|
multisample: Multisample,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -15,6 +16,14 @@ impl<'a> Viewport<'a> {
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let caps = surface.get_capabilities(adapter);
|
let caps = surface.get_capabilities(adapter);
|
||||||
let format = wgpu::TextureFormat::Bgra8Unorm;
|
let format = wgpu::TextureFormat::Bgra8Unorm;
|
||||||
|
let sample_count = adapter
|
||||||
|
.get_texture_format_features(format)
|
||||||
|
.flags
|
||||||
|
.supported_sample_counts()
|
||||||
|
.into_iter()
|
||||||
|
.max()
|
||||||
|
.unwrap();
|
||||||
|
eprintln!("Using x{sample_count} mutlisampling");
|
||||||
let config = wgpu::SurfaceConfiguration {
|
let config = wgpu::SurfaceConfiguration {
|
||||||
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
|
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
|
||||||
format,
|
format,
|
||||||
|
|
@ -25,17 +34,18 @@ impl<'a> Viewport<'a> {
|
||||||
view_formats: vec![],
|
view_formats: vec![],
|
||||||
desired_maximum_frame_latency: 2,
|
desired_maximum_frame_latency: 2,
|
||||||
};
|
};
|
||||||
let multisample = Multisample::new(device, format, size);
|
let multisample = Multisample::new(device, format, size, sample_count);
|
||||||
Self {
|
Self {
|
||||||
surface,
|
surface,
|
||||||
config,
|
config,
|
||||||
|
sample_count,
|
||||||
multisample,
|
multisample,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn configure(&mut self, device: &wgpu::Device) {
|
pub fn configure(&mut self, device: &wgpu::Device) {
|
||||||
self.surface.configure(&device, &self.config);
|
self.surface.configure(&device, &self.config);
|
||||||
self.multisample = Multisample::new(device, self.format(), self.size());
|
self.multisample = Multisample::new(device, self.format(), self.size(), self.sample_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn resize(&mut self, device: &wgpu::Device, size: UVec2) {
|
pub fn resize(&mut self, device: &wgpu::Device, size: UVec2) {
|
||||||
|
|
@ -53,7 +63,7 @@ impl<'a> Viewport<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn sample_count(&self) -> u32 {
|
pub fn sample_count(&self) -> u32 {
|
||||||
Multisample::SAMPLE_COUNT
|
self.sample_count
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_single_pass(
|
pub fn render_single_pass(
|
||||||
|
|
@ -100,9 +110,12 @@ struct Multisample {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Multisample {
|
impl Multisample {
|
||||||
const SAMPLE_COUNT: u32 = 4;
|
fn new(
|
||||||
|
device: &wgpu::Device,
|
||||||
fn new(device: &wgpu::Device, format: wgpu::TextureFormat, size: UVec2) -> Multisample {
|
format: wgpu::TextureFormat,
|
||||||
|
size: UVec2,
|
||||||
|
sample_count: u32,
|
||||||
|
) -> Multisample {
|
||||||
let tex = device.create_texture(&wgpu::TextureDescriptor {
|
let tex = device.create_texture(&wgpu::TextureDescriptor {
|
||||||
label: Some("Multisample texture"),
|
label: Some("Multisample texture"),
|
||||||
size: wgpu::Extent3d {
|
size: wgpu::Extent3d {
|
||||||
|
|
@ -111,7 +124,7 @@ impl Multisample {
|
||||||
depth_or_array_layers: 1,
|
depth_or_array_layers: 1,
|
||||||
},
|
},
|
||||||
mip_level_count: 1,
|
mip_level_count: 1,
|
||||||
sample_count: Self::SAMPLE_COUNT,
|
sample_count,
|
||||||
dimension: wgpu::TextureDimension::D2,
|
dimension: wgpu::TextureDimension::D2,
|
||||||
format,
|
format,
|
||||||
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
|
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user