Fix needing extra device features for shadowmapping

This commit is contained in:
Lauri Räsänen 2023-11-04 21:58:35 +02:00
parent 139a568a6d
commit 60d0f64356

View file

@ -1,6 +1,7 @@
use cgmath::prelude::*; use cgmath::prelude::*;
use wgpu::{InstanceDescriptor, Backends, TextureView, TextureViewDescriptor, StoreOp}; use wgpu::{InstanceDescriptor, Backends, TextureView, TextureViewDescriptor, StoreOp};
use std::default::Default; use std::default::Default;
use std::mem;
use std::num::NonZeroU32; use std::num::NonZeroU32;
use std::time::Duration; use std::time::Duration;
@ -67,8 +68,7 @@ impl State {
let (device, queue) = adapter let (device, queue) = adapter
.request_device( .request_device(
&wgpu::DeviceDescriptor { &wgpu::DeviceDescriptor {
features: wgpu::Features::TEXTURE_BINDING_ARRAY features: wgpu::Features::default(),
| wgpu::Features::SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING,
limits: if cfg!(target_arch = "wasm32") { limits: if cfg!(target_arch = "wasm32") {
wgpu::Limits::downlevel_webgl2_defaults() wgpu::Limits::downlevel_webgl2_defaults()
} else { } else {
@ -189,6 +189,8 @@ impl State {
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
}); });
let light_uniform_size = mem::size_of::<LightUniform>() as u64;
let light_matrix_uniform_size = mem::size_of::<u32>() as u64;
let light_bind_group_layout = let light_bind_group_layout =
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
entries: &[ entries: &[
@ -199,7 +201,7 @@ impl State {
ty: wgpu::BindingType::Buffer { ty: wgpu::BindingType::Buffer {
ty: wgpu::BufferBindingType::Uniform, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false, has_dynamic_offset: false,
min_binding_size: None, min_binding_size: wgpu::BufferSize::new(light_uniform_size),
}, },
count: None, count: None,
}, },
@ -210,7 +212,7 @@ impl State {
ty: wgpu::BindingType::Buffer { ty: wgpu::BindingType::Buffer {
ty: wgpu::BufferBindingType::Uniform, ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false, has_dynamic_offset: false,
min_binding_size: None, min_binding_size: wgpu::BufferSize::new(light_matrix_uniform_size),
}, },
count: None, count: None,
}, },
@ -247,16 +249,16 @@ impl State {
view_dimension: wgpu::TextureViewDimension::D2Array, view_dimension: wgpu::TextureViewDimension::D2Array,
sample_type: wgpu::TextureSampleType::Depth, sample_type: wgpu::TextureSampleType::Depth,
}, },
count: NonZeroU32::new(1), count: None,
}, },
wgpu::BindGroupLayoutEntry { wgpu::BindGroupLayoutEntry {
binding: 1, binding: 1,
visibility: wgpu::ShaderStages::FRAGMENT, visibility: wgpu::ShaderStages::FRAGMENT,
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Comparison), ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Comparison),
count: NonZeroU32::new(1), count: None,
}, },
], ],
label: Some("Light Bind Group Layout"), label: Some("Light Depth Bind Group Layout"),
}); });
let light_depth_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { let light_depth_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {