Skip to content

Commit 086f476

Browse files
committed
Add RenderDevice to specialization key for adapter feature/limit configuration
1 parent 94b21bc commit 086f476

File tree

4 files changed

+29
-8
lines changed

4 files changed

+29
-8
lines changed

crates/bevy_pbr/src/material.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,11 @@ impl<M: Material> SpecializedMaterial for M {
8989
type Key = ();
9090

9191
#[inline]
92-
fn key(_material: &<Self as RenderAsset>::PreparedAsset) -> Self::Key {}
92+
fn key(
93+
_render_device: &RenderDevice,
94+
_material: &<Self as RenderAsset>::PreparedAsset,
95+
) -> Self::Key {
96+
}
9397

9498
#[inline]
9599
fn specialize(
@@ -144,7 +148,10 @@ pub trait SpecializedMaterial: Asset + RenderAsset {
144148
/// Extract the [`SpecializedMaterial::Key`] for the "prepared" version of this material. This key will be
145149
/// passed in to the [`SpecializedMaterial::specialize`] function when compiling the [`RenderPipeline`](bevy_render::render_resource::RenderPipeline)
146150
/// for a given entity's material.
147-
fn key(material: &<Self as RenderAsset>::PreparedAsset) -> Self::Key;
151+
fn key(
152+
render_device: &RenderDevice,
153+
material: &<Self as RenderAsset>::PreparedAsset,
154+
) -> Self::Key;
148155

149156
/// Specializes the given `descriptor` according to the given `key`.
150157
fn specialize(
@@ -308,6 +315,7 @@ pub fn queue_material_meshes<M: SpecializedMaterial>(
308315
material_pipeline: Res<MaterialPipeline<M>>,
309316
mut pipelines: ResMut<SpecializedMeshPipelines<MaterialPipeline<M>>>,
310317
mut pipeline_cache: ResMut<PipelineCache>,
318+
render_device: Res<RenderDevice>,
311319
msaa: Res<Msaa>,
312320
render_meshes: Res<RenderAssets<Mesh>>,
313321
render_materials: Res<RenderAssets<M>>,
@@ -320,6 +328,7 @@ pub fn queue_material_meshes<M: SpecializedMaterial>(
320328
&mut RenderPhase<Transparent3d>,
321329
)>,
322330
) {
331+
let render_device = render_device.into_inner();
323332
for (view, visible_entities, mut opaque_phase, mut alpha_mask_phase, mut transparent_phase) in
324333
views.iter_mut()
325334
{
@@ -354,7 +363,7 @@ pub fn queue_material_meshes<M: SpecializedMaterial>(
354363
mesh_key |= MeshPipelineKey::TRANSPARENT_MAIN_PASS;
355364
}
356365

357-
let material_key = M::key(material);
366+
let material_key = M::key(render_device, material);
358367

359368
let pipeline_id = pipelines.specialize(
360369
&mut pipeline_cache,

crates/bevy_pbr/src/pbr_material.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,10 @@ pub struct StandardMaterialKey {
362362
impl SpecializedMaterial for StandardMaterial {
363363
type Key = StandardMaterialKey;
364364

365-
fn key(render_asset: &<Self as RenderAsset>::PreparedAsset) -> Self::Key {
365+
fn key(
366+
render_device: &RenderDevice,
367+
render_asset: &<Self as RenderAsset>::PreparedAsset,
368+
) -> Self::Key {
366369
StandardMaterialKey {
367370
normal_map: render_asset.has_normal_map,
368371
cull_mode: render_asset.cull_mode,

crates/bevy_sprite/src/mesh2d/material.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ impl<M: Material2d> SpecializedMaterial2d for M {
8686
type Key = ();
8787

8888
#[inline]
89-
fn key(_material: &<Self as RenderAsset>::PreparedAsset) -> Self::Key {}
89+
fn key(
90+
_render_device: &RenderDevice,
91+
_material: &<Self as RenderAsset>::PreparedAsset,
92+
) -> Self::Key {
93+
}
9094

9195
#[inline]
9296
fn specialize(
@@ -136,7 +140,10 @@ pub trait SpecializedMaterial2d: Asset + RenderAsset {
136140
/// Extract the [`SpecializedMaterial2d::Key`] for the "prepared" version of this material. This key will be
137141
/// passed in to the [`SpecializedMaterial2d::specialize`] function when compiling the [`RenderPipeline`](bevy_render::render_resource::RenderPipeline)
138142
/// for a given entity's material.
139-
fn key(material: &<Self as RenderAsset>::PreparedAsset) -> Self::Key;
143+
fn key(
144+
render_device: &RenderDevice,
145+
material: &<Self as RenderAsset>::PreparedAsset,
146+
) -> Self::Key;
140147

141148
/// Specializes the given `descriptor` according to the given `key`.
142149
fn specialize(
@@ -292,6 +299,7 @@ pub fn queue_material2d_meshes<M: SpecializedMaterial2d>(
292299
material2d_pipeline: Res<Material2dPipeline<M>>,
293300
mut pipelines: ResMut<SpecializedMeshPipelines<Material2dPipeline<M>>>,
294301
mut pipeline_cache: ResMut<PipelineCache>,
302+
render_device: Res<RenderDevice>,
295303
msaa: Res<Msaa>,
296304
render_meshes: Res<RenderAssets<Mesh>>,
297305
render_materials: Res<RenderAssets<M>>,
@@ -301,6 +309,7 @@ pub fn queue_material2d_meshes<M: SpecializedMaterial2d>(
301309
if material2d_meshes.is_empty() {
302310
return;
303311
}
312+
let render_device = render_device.into_inner();
304313
for (visible_entities, mut transparent_phase) in views.iter_mut() {
305314
let draw_transparent_pbr = transparent_draw_functions
306315
.read()
@@ -318,7 +327,7 @@ pub fn queue_material2d_meshes<M: SpecializedMaterial2d>(
318327
let mesh_key = msaa_key
319328
| Mesh2dPipelineKey::from_primitive_topology(mesh.primitive_topology);
320329

321-
let material_key = M::key(material2d);
330+
let material_key = M::key(render_device, material2d);
322331
let pipeline_id = pipelines.specialize(
323332
&mut pipeline_cache,
324333
&material2d_pipeline,

examples/shader/shader_material_glsl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ impl RenderAsset for CustomMaterial {
9494
impl SpecializedMaterial for CustomMaterial {
9595
type Key = ();
9696

97-
fn key(_: &<CustomMaterial as RenderAsset>::PreparedAsset) -> Self::Key {}
97+
fn key(_: &RenderDevice, _: &<CustomMaterial as RenderAsset>::PreparedAsset) -> Self::Key {}
9898

9999
fn specialize(
100100
descriptor: &mut RenderPipelineDescriptor,

0 commit comments

Comments
 (0)