Skip to content

Material bind group shader def #20069

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions assets/shaders/array_texture.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
}
#import bevy_core_pipeline::tonemapping::tone_mapping

@group(3) @binding(0) var my_array_texture: texture_2d_array<f32>;
@group(3) @binding(1) var my_array_texture_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var my_array_texture: texture_2d_array<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var my_array_texture_sampler: sampler;

@fragment
fn fragment(
Expand Down
4 changes: 2 additions & 2 deletions assets/shaders/automatic_instancing.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
view_transformations::position_world_to_clip
}

@group(3) @binding(0) var texture: texture_2d<f32>;
@group(3) @binding(1) var texture_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var texture_sampler: sampler;

struct Vertex {
@builtin(instance_index) instance_index: u32,
Expand Down
10 changes: 5 additions & 5 deletions assets/shaders/bindless_material.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ struct MaterialBindings {
}

#ifdef BINDLESS
@group(3) @binding(0) var<storage> materials: array<MaterialBindings>;
@group(3) @binding(10) var<storage> material_color: binding_array<Color>;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<storage> materials: array<MaterialBindings>;
@group(#{MATERIAL_BIND_GROUP}) @binding(10) var<storage> material_color: binding_array<Color>;
#else // BINDLESS
@group(3) @binding(0) var<uniform> material_color: Color;
@group(3) @binding(1) var material_color_texture: texture_2d<f32>;
@group(3) @binding(2) var material_color_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> material_color: Color;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var material_color_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(2) var material_color_sampler: sampler;
#endif // BINDLESS

@fragment
Expand Down
6 changes: 3 additions & 3 deletions assets/shaders/cubemap_unlit.wgsl
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#import bevy_pbr::forward_io::VertexOutput

#ifdef CUBEMAP_ARRAY
@group(3) @binding(0) var base_color_texture: texture_cube_array<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var base_color_texture: texture_cube_array<f32>;
#else
@group(3) @binding(0) var base_color_texture: texture_cube<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var base_color_texture: texture_cube<f32>;
#endif

@group(3) @binding(1) var base_color_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var base_color_sampler: sampler;

@fragment
fn fragment(
Expand Down
6 changes: 3 additions & 3 deletions assets/shaders/custom_material.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
// we can import items from shader modules in the assets folder with a quoted path
#import "shaders/custom_material_import.wgsl"::COLOR_MULTIPLIER

@group(3) @binding(0) var<uniform> material_color: vec4<f32>;
@group(3) @binding(1) var material_color_texture: texture_2d<f32>;
@group(3) @binding(2) var material_color_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> material_color: vec4<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var material_color_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(2) var material_color_sampler: sampler;

@fragment
fn fragment(
Expand Down
6 changes: 3 additions & 3 deletions assets/shaders/custom_material_2d.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
// we can import items from shader modules in the assets folder with a quoted path
#import "shaders/custom_material_import.wgsl"::COLOR_MULTIPLIER

@group(2) @binding(0) var<uniform> material_color: vec4<f32>;
@group(2) @binding(1) var base_color_texture: texture_2d<f32>;
@group(2) @binding(2) var base_color_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> material_color: vec4<f32>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MATERIAL_2D

@group(#{MATERIAL_BIND_GROUP}) @binding(1) var base_color_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(2) var base_color_sampler: sampler;

@fragment
fn fragment(mesh: VertexOutput) -> @location(0) vec4<f32> {
Expand Down
4 changes: 2 additions & 2 deletions assets/shaders/custom_material_screenspace_texture.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
utils::coords_to_viewport_uv,
}

@group(3) @binding(0) var texture: texture_2d<f32>;
@group(3) @binding(1) var texture_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var texture_sampler: sampler;

@fragment
fn fragment(
Expand Down
2 changes: 1 addition & 1 deletion assets/shaders/custom_vertex_attribute.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
struct CustomMaterial {
color: vec4<f32>,
};
@group(3) @binding(0) var<uniform> material: CustomMaterial;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> material: CustomMaterial;

struct Vertex {
@builtin(instance_index) instance_index: u32,
Expand Down
2 changes: 1 addition & 1 deletion assets/shaders/extended_material.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ struct MyExtendedMaterial {
quantize_steps: u32,
}

@group(3) @binding(100)
@group(#{MATERIAL_BIND_GROUP}) @binding(100)
var<uniform> my_extended_material: MyExtendedMaterial;

@fragment
Expand Down
10 changes: 5 additions & 5 deletions assets/shaders/extended_material_bindless.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,19 @@ struct ExampleBindlessExtendedMaterial {

// The indices of the bindless resources in the bindless resource arrays, for
// the `ExampleBindlessExtension` fields.
@group(3) @binding(100) var<storage> example_extended_material_indices:
@group(#{MATERIAL_BIND_GROUP}) @binding(100) var<storage> example_extended_material_indices:
array<ExampleBindlessExtendedMaterialIndices>;
// An array that holds the `ExampleBindlessExtendedMaterial` plain old data,
// indexed by `ExampleBindlessExtendedMaterialIndices.material`.
@group(3) @binding(101) var<storage> example_extended_material:
@group(#{MATERIAL_BIND_GROUP}) @binding(101) var<storage> example_extended_material:
array<ExampleBindlessExtendedMaterial>;

#else // BINDLESS

// In non-bindless mode, we simply use a uniform for the plain old data.
@group(3) @binding(50) var<uniform> example_extended_material: ExampleBindlessExtendedMaterial;
@group(3) @binding(51) var modulate_texture: texture_2d<f32>;
@group(3) @binding(52) var modulate_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(50) var<uniform> example_extended_material: ExampleBindlessExtendedMaterial;
@group(#{MATERIAL_BIND_GROUP}) @binding(51) var modulate_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(52) var modulate_sampler: sampler;

#endif // BINDLESS

Expand Down
24 changes: 12 additions & 12 deletions assets/shaders/fallback_image_test.wgsl
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
#import bevy_pbr::forward_io::VertexOutput

@group(3) @binding(0) var test_texture_1d: texture_1d<f32>;
@group(3) @binding(1) var test_texture_1d_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var test_texture_1d: texture_1d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var test_texture_1d_sampler: sampler;

@group(3) @binding(2) var test_texture_2d: texture_2d<f32>;
@group(3) @binding(3) var test_texture_2d_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(2) var test_texture_2d: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(3) var test_texture_2d_sampler: sampler;

@group(3) @binding(4) var test_texture_2d_array: texture_2d_array<f32>;
@group(3) @binding(5) var test_texture_2d_array_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(4) var test_texture_2d_array: texture_2d_array<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(5) var test_texture_2d_array_sampler: sampler;

@group(3) @binding(6) var test_texture_cube: texture_cube<f32>;
@group(3) @binding(7) var test_texture_cube_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(6) var test_texture_cube: texture_cube<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(7) var test_texture_cube_sampler: sampler;

@group(3) @binding(8) var test_texture_cube_array: texture_cube_array<f32>;
@group(3) @binding(9) var test_texture_cube_array_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(8) var test_texture_cube_array: texture_cube_array<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(9) var test_texture_cube_array_sampler: sampler;

@group(3) @binding(10) var test_texture_3d: texture_3d<f32>;
@group(3) @binding(11) var test_texture_3d_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(10) var test_texture_3d: texture_3d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(11) var test_texture_3d_sampler: sampler;

@fragment
fn fragment(in: VertexOutput) {}
2 changes: 1 addition & 1 deletion assets/shaders/irradiance_volume_voxel_visualization.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ struct VoxelVisualizationIrradianceVolumeInfo {
intensity: f32,
}

@group(3) @binding(100)
@group(#{MATERIAL_BIND_GROUP}) @binding(100)
var<uniform> irradiance_volume_info: VoxelVisualizationIrradianceVolumeInfo;

@fragment
Expand Down
2 changes: 1 addition & 1 deletion assets/shaders/line_material.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ struct LineMaterial {
color: vec4<f32>,
};

@group(3) @binding(0) var<uniform> material: LineMaterial;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> material: LineMaterial;

@fragment
fn fragment(
Expand Down
4 changes: 2 additions & 2 deletions assets/shaders/manual_material.wgsl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#import bevy_pbr::forward_io::VertexOutput

@group(3) @binding(0) var material_color_texture: texture_2d<f32>;
@group(3) @binding(1) var material_color_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var material_color_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var material_color_sampler: sampler;

@fragment
fn fragment(
Expand Down
2 changes: 1 addition & 1 deletion assets/shaders/shader_defs.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ struct CustomMaterial {
color: vec4<f32>,
};

@group(3) @binding(0) var<uniform> material: CustomMaterial;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> material: CustomMaterial;

@fragment
fn fragment(
Expand Down
2 changes: 1 addition & 1 deletion assets/shaders/show_prepass.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ struct ShowPrepassSettings {
padding_1: u32,
padding_2: u32,
}
@group(3) @binding(0) var<uniform> settings: ShowPrepassSettings;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> settings: ShowPrepassSettings;

@fragment
fn fragment(
Expand Down
2 changes: 1 addition & 1 deletion assets/shaders/storage_buffer.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
view_transformations::position_world_to_clip
}

@group(3) @binding(0) var<storage, read> colors: array<vec4<f32>, 5>;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<storage, read> colors: array<vec4<f32>, 5>;

struct Vertex {
@builtin(instance_index) instance_index: u32,
Expand Down
4 changes: 2 additions & 2 deletions assets/shaders/texture_binding_array.wgsl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#import bevy_pbr::forward_io::VertexOutput

@group(3) @binding(0) var textures: binding_array<texture_2d<f32>>;
@group(3) @binding(1) var nearest_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var textures: binding_array<texture_2d<f32>>;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var nearest_sampler: sampler;
// We can also have array of samplers
// var samplers: binding_array<sampler>;

Expand Down
6 changes: 3 additions & 3 deletions assets/shaders/water_material.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ struct WaterSettings {

@group(0) @binding(1) var<uniform> globals: Globals;

@group(3) @binding(100) var water_normals_texture: texture_2d<f32>;
@group(3) @binding(101) var water_normals_sampler: sampler;
@group(3) @binding(102) var<uniform> water_settings: WaterSettings;
@group(#{MATERIAL_BIND_GROUP}) @binding(100) var water_normals_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(101) var water_normals_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(102) var<uniform> water_settings: WaterSettings;

// Samples a single octave of noise and returns the resulting normal.
fn sample_noise_octave(uv: vec2<f32>, strength: f32) -> vec3<f32> {
Expand Down
2 changes: 1 addition & 1 deletion crates/bevy_pbr/src/decal/forward_decal.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
}
#import bevy_render::maths::project_onto

@group(3) @binding(200)
@group(#{MATERIAL_BIND_GROUP}) @binding(200)
var<uniform> inv_depth_fade_factor: f32;

struct ForwardDecalInformation {
Expand Down
14 changes: 13 additions & 1 deletion crates/bevy_pbr/src/material.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ use core::{hash::Hash, marker::PhantomData};
use smallvec::SmallVec;
use tracing::error;

pub const MATERIAL_BIND_GROUP_INDEX: usize = 3;

/// Materials are used alongside [`MaterialPlugin`], [`Mesh3d`], and [`MeshMaterial3d`]
/// to spawn entities that are rendered with a specific [`Material`] type. They serve as an easy to use high level
/// way to render [`Mesh3d`] entities with custom shader logic.
Expand Down Expand Up @@ -457,6 +459,16 @@ impl SpecializedMeshPipeline for MaterialPipelineSpecializer {
.pipeline
.mesh_pipeline
.specialize(key.mesh_key, layout)?;
descriptor.vertex.shader_defs.push(ShaderDefVal::UInt(
"MATERIAL_BIND_GROUP".into(),
MATERIAL_BIND_GROUP_INDEX as u32,
));
if let Some(ref mut fragment) = descriptor.fragment {
fragment.shader_defs.push(ShaderDefVal::UInt(
"MATERIAL_BIND_GROUP".into(),
MATERIAL_BIND_GROUP_INDEX as u32,
));
};
if let Some(vertex_shader) = self.properties.get_shader(MaterialVertexShader) {
descriptor.vertex.shader = vertex_shader.clone();
}
Expand Down Expand Up @@ -498,7 +510,7 @@ pub type DrawMaterial = (
SetMeshViewBindGroup<0>,
SetMeshViewBindingArrayBindGroup<1>,
SetMeshBindGroup<2>,
SetMaterialBindGroup<3>,
SetMaterialBindGroup<MATERIAL_BIND_GROUP_INDEX>,
DrawMesh,
);

Expand Down
66 changes: 33 additions & 33 deletions crates/bevy_pbr/src/render/pbr_bindings.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -37,53 +37,53 @@ struct StandardMaterialBindings {
specular_tint_sampler: u32, // 30
}

@group(3) @binding(0) var<storage> material_indices: array<StandardMaterialBindings>;
@group(3) @binding(10) var<storage> material_array: array<StandardMaterial>;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<storage> material_indices: array<StandardMaterialBindings>;
@group(#{MATERIAL_BIND_GROUP}) @binding(10) var<storage> material_array: array<StandardMaterial>;

#else // BINDLESS

@group(3) @binding(0) var<uniform> material: StandardMaterial;
@group(3) @binding(1) var base_color_texture: texture_2d<f32>;
@group(3) @binding(2) var base_color_sampler: sampler;
@group(3) @binding(3) var emissive_texture: texture_2d<f32>;
@group(3) @binding(4) var emissive_sampler: sampler;
@group(3) @binding(5) var metallic_roughness_texture: texture_2d<f32>;
@group(3) @binding(6) var metallic_roughness_sampler: sampler;
@group(3) @binding(7) var occlusion_texture: texture_2d<f32>;
@group(3) @binding(8) var occlusion_sampler: sampler;
@group(3) @binding(9) var normal_map_texture: texture_2d<f32>;
@group(3) @binding(10) var normal_map_sampler: sampler;
@group(3) @binding(11) var depth_map_texture: texture_2d<f32>;
@group(3) @binding(12) var depth_map_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> material: StandardMaterial;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var base_color_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(2) var base_color_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(3) var emissive_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(4) var emissive_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(5) var metallic_roughness_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(6) var metallic_roughness_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(7) var occlusion_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(8) var occlusion_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(9) var normal_map_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(10) var normal_map_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(11) var depth_map_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(12) var depth_map_sampler: sampler;

#ifdef PBR_ANISOTROPY_TEXTURE_SUPPORTED
@group(3) @binding(13) var anisotropy_texture: texture_2d<f32>;
@group(3) @binding(14) var anisotropy_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(13) var anisotropy_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(14) var anisotropy_sampler: sampler;
#endif // PBR_ANISOTROPY_TEXTURE_SUPPORTED

#ifdef PBR_TRANSMISSION_TEXTURES_SUPPORTED
@group(3) @binding(15) var specular_transmission_texture: texture_2d<f32>;
@group(3) @binding(16) var specular_transmission_sampler: sampler;
@group(3) @binding(17) var thickness_texture: texture_2d<f32>;
@group(3) @binding(18) var thickness_sampler: sampler;
@group(3) @binding(19) var diffuse_transmission_texture: texture_2d<f32>;
@group(3) @binding(20) var diffuse_transmission_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(15) var specular_transmission_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(16) var specular_transmission_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(17) var thickness_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(18) var thickness_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(19) var diffuse_transmission_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(20) var diffuse_transmission_sampler: sampler;
#endif // PBR_TRANSMISSION_TEXTURES_SUPPORTED

#ifdef PBR_MULTI_LAYER_MATERIAL_TEXTURES_SUPPORTED
@group(3) @binding(21) var clearcoat_texture: texture_2d<f32>;
@group(3) @binding(22) var clearcoat_sampler: sampler;
@group(3) @binding(23) var clearcoat_roughness_texture: texture_2d<f32>;
@group(3) @binding(24) var clearcoat_roughness_sampler: sampler;
@group(3) @binding(25) var clearcoat_normal_texture: texture_2d<f32>;
@group(3) @binding(26) var clearcoat_normal_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(21) var clearcoat_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(22) var clearcoat_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(23) var clearcoat_roughness_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(24) var clearcoat_roughness_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(25) var clearcoat_normal_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(26) var clearcoat_normal_sampler: sampler;
#endif // PBR_MULTI_LAYER_MATERIAL_TEXTURES_SUPPORTED

#ifdef PBR_SPECULAR_TEXTURES_SUPPORTED
@group(3) @binding(27) var specular_texture: texture_2d<f32>;
@group(3) @binding(28) var specular_sampler: sampler;
@group(3) @binding(29) var specular_tint_texture: texture_2d<f32>;
@group(3) @binding(30) var specular_tint_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(27) var specular_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(28) var specular_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(29) var specular_tint_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(30) var specular_tint_sampler: sampler;
#endif // PBR_SPECULAR_TEXTURES_SUPPORTED

#endif // BINDLESS
Loading