Skip to content

Commit c5e887a

Browse files
committed
Update PBR fragment parameters
1 parent 53208cb commit c5e887a

File tree

2 files changed

+41
-7
lines changed

2 files changed

+41
-7
lines changed

src/bevy_pbr_rust.rs

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! `bevy-pbr-rust`-backed `RustGpuMaterial` implementation for `StandardMaterial`.
22
3-
use bevy::prelude::StandardMaterial;
3+
use bevy::{prelude::StandardMaterial, render::render_resource::ShaderDefVal};
44

55
use crate::prelude::{EntryPoint, EntryPointName, EntryPointParameters, RustGpuMaterial};
66

@@ -31,15 +31,13 @@ impl EntryPoint for PbrFragment {
3131
const NAME: EntryPointName = "pbr::entry_points::fragment";
3232
const PARAMETERS: EntryPointParameters = &[
3333
(&[("NO_TEXTURE_ARRAYS_SUPPORT", "texture")], "array"),
34-
(&[("NO_STORAGE_BUFFERS_SUPPORT", "uniform")], "storage"),
35-
(&[("VERTEX_POSITIONS", "some")], "none"),
36-
(&[("VERTEX_NORMALS", "some")], "none"),
3734
(&[("VERTEX_UVS", "some")], "none"),
3835
(&[("VERTEX_TANGENTS", "some")], "none"),
3936
(&[("VERTEX_COLORS", "some")], "none"),
4037
(&[("STANDARDMATERIAL_NORMAL_MAP", "some")], "none"),
4138
(&[("SKINNED", "some")], "none"),
4239
(&[("TONEMAP_IN_SHADER", "some")], "none"),
40+
(&[("PREMULTIPLY_ALPHA", "some")], "none"),
4341
(&[("DEBAND_DITHER", "some")], "none"),
4442
(
4543
&[
@@ -56,11 +54,47 @@ impl EntryPoint for PbrFragment {
5654
"none",
5755
),
5856
];
57+
58+
fn permutation(shader_defs: &Vec<ShaderDefVal>) -> Vec<String> {
59+
let mut permutation = vec![];
60+
61+
for (defined, undefined) in Self::PARAMETERS.iter() {
62+
if let Some(mapping) = defined.iter().find_map(|(def, mapping)| {
63+
if shader_defs.contains(&ShaderDefVal::Bool(def.to_string(), true)) {
64+
Some(mapping)
65+
} else {
66+
None
67+
}
68+
}) {
69+
permutation.push(mapping.to_string());
70+
} else {
71+
permutation.push(undefined.to_string())
72+
};
73+
}
74+
75+
if let Some(ge) = shader_defs.iter().find_map(|def| match def {
76+
bevy::render::render_resource::ShaderDefVal::UInt(key, value) => {
77+
if key.as_str() == "AVAILABLE_STORAGE_BUFFER_BINDINGS" {
78+
Some(*value >= 3)
79+
} else {
80+
None
81+
}
82+
}
83+
_ => None,
84+
}) {
85+
if ge {
86+
permutation.insert(1, "storage".to_string())
87+
} else {
88+
permutation.insert(1, "uniform".to_string())
89+
}
90+
}
91+
92+
permutation
93+
}
5994
}
6095

6196
/// `StandardMaterial` implementation
6297
impl RustGpuMaterial for StandardMaterial {
6398
type Vertex = MeshVertex;
6499
type Fragment = PbrFragment;
65100
}
66-

src/rust_gpu.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,8 @@ where
297297
if let Some(vertex_shader) = key.bind_group_data.vertex_shader {
298298
info!("Vertex shader is present, aggregating defs");
299299

300-
info!("Building vertex entrypoint");
301300
let entry_point = M::Vertex::build(&descriptor.vertex.shader_defs);
301+
info!("Built vertex entrypoint {entry_point:}");
302302

303303
#[allow(unused_mut)]
304304
let mut apply = true;
@@ -355,8 +355,8 @@ where
355355
if let Some(fragment_shader) = key.bind_group_data.fragment_shader {
356356
info!("Fragment shader is present, aggregating defs");
357357

358-
info!("Building fragment entrypoint");
359358
let entry_point = M::Fragment::build(&fragment_descriptor.shader_defs);
359+
info!("Built fragment entrypoint {entry_point:}");
360360

361361
#[allow(unused_mut)]
362362
let mut apply = true;

0 commit comments

Comments
 (0)