Switch to default PartialEq implementation for RenderResourceBinding (#877)
* Switch to default PartialEq implementation for RenderResourceBinding * Move specialized RenderResourceBinding Hash implementation to BindGroupBuilder
This commit is contained in:
parent
b4a864ba5a
commit
d11be437cb
@ -1,4 +1,4 @@
|
|||||||
use super::{BufferId, RenderResourceBinding, SamplerId, TextureId};
|
use super::{BufferId, RenderResourceBinding, RenderResourceId, SamplerId, TextureId};
|
||||||
use bevy_utils::AHasher;
|
use bevy_utils::AHasher;
|
||||||
use std::{
|
use std::{
|
||||||
hash::{Hash, Hasher},
|
hash::{Hash, Hasher},
|
||||||
@ -45,7 +45,7 @@ impl BindGroupBuilder {
|
|||||||
self.dynamic_uniform_indices.push(dynamic_index);
|
self.dynamic_uniform_indices.push(dynamic_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.hash(&mut self.hasher);
|
self.hash_binding(&binding);
|
||||||
self.indexed_bindings.push(IndexedBindGroupEntry {
|
self.indexed_bindings.push(IndexedBindGroupEntry {
|
||||||
index,
|
index,
|
||||||
entry: binding,
|
entry: binding,
|
||||||
@ -102,4 +102,23 @@ impl BindGroupBuilder {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn hash_binding(&mut self, binding: &RenderResourceBinding) {
|
||||||
|
match binding {
|
||||||
|
RenderResourceBinding::Buffer {
|
||||||
|
buffer,
|
||||||
|
range,
|
||||||
|
dynamic_index: _, // dynamic_index is not a part of the binding
|
||||||
|
} => {
|
||||||
|
RenderResourceId::from(*buffer).hash(&mut self.hasher);
|
||||||
|
range.hash(&mut self.hasher);
|
||||||
|
}
|
||||||
|
RenderResourceBinding::Texture(texture) => {
|
||||||
|
RenderResourceId::from(*texture).hash(&mut self.hasher);
|
||||||
|
}
|
||||||
|
RenderResourceBinding::Sampler(sampler) => {
|
||||||
|
RenderResourceId::from(*sampler).hash(&mut self.hasher);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
use super::{BindGroup, BindGroupId, BufferId, RenderResourceId, SamplerId, TextureId};
|
use super::{BindGroup, BindGroupId, BufferId, SamplerId, TextureId};
|
||||||
use crate::{
|
use crate::{
|
||||||
pipeline::{BindGroupDescriptor, BindGroupDescriptorId, PipelineDescriptor},
|
pipeline::{BindGroupDescriptor, BindGroupDescriptorId, PipelineDescriptor},
|
||||||
renderer::RenderResourceContext,
|
renderer::RenderResourceContext,
|
||||||
};
|
};
|
||||||
use bevy_asset::{Asset, Handle, HandleUntyped};
|
use bevy_asset::{Asset, Handle, HandleUntyped};
|
||||||
use bevy_utils::{HashMap, HashSet};
|
use bevy_utils::{HashMap, HashSet};
|
||||||
use std::{hash::Hash, ops::Range};
|
use std::ops::Range;
|
||||||
|
|
||||||
#[derive(Clone, Eq, Debug)]
|
#[derive(Clone, PartialEq, Eq, Debug)]
|
||||||
pub enum RenderResourceBinding {
|
pub enum RenderResourceBinding {
|
||||||
Buffer {
|
Buffer {
|
||||||
buffer: BufferId,
|
buffer: BufferId,
|
||||||
@ -51,55 +51,6 @@ impl RenderResourceBinding {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PartialEq for RenderResourceBinding {
|
|
||||||
fn eq(&self, other: &Self) -> bool {
|
|
||||||
match (self, other) {
|
|
||||||
(
|
|
||||||
RenderResourceBinding::Buffer {
|
|
||||||
buffer: self_buffer,
|
|
||||||
range: self_range,
|
|
||||||
dynamic_index: _,
|
|
||||||
},
|
|
||||||
RenderResourceBinding::Buffer {
|
|
||||||
buffer: other_buffer,
|
|
||||||
range: other_range,
|
|
||||||
dynamic_index: _,
|
|
||||||
},
|
|
||||||
) => self_buffer == other_buffer && self_range == other_range,
|
|
||||||
(
|
|
||||||
RenderResourceBinding::Texture(self_texture),
|
|
||||||
RenderResourceBinding::Texture(other_texture),
|
|
||||||
) => RenderResourceId::from(*self_texture) == RenderResourceId::from(*other_texture),
|
|
||||||
(
|
|
||||||
RenderResourceBinding::Sampler(self_sampler),
|
|
||||||
RenderResourceBinding::Sampler(other_sampler),
|
|
||||||
) => RenderResourceId::from(*self_sampler) == RenderResourceId::from(*other_sampler),
|
|
||||||
_ => false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Hash for RenderResourceBinding {
|
|
||||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
|
||||||
match self {
|
|
||||||
RenderResourceBinding::Buffer {
|
|
||||||
buffer,
|
|
||||||
range,
|
|
||||||
dynamic_index: _, // dynamic_index is not a part of the binding
|
|
||||||
} => {
|
|
||||||
RenderResourceId::from(*buffer).hash(state);
|
|
||||||
range.hash(state);
|
|
||||||
}
|
|
||||||
RenderResourceBinding::Texture(texture) => {
|
|
||||||
RenderResourceId::from(*texture).hash(state);
|
|
||||||
}
|
|
||||||
RenderResourceBinding::Sampler(sampler) => {
|
|
||||||
RenderResourceId::from(*sampler).hash(state);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Eq, PartialEq, Debug)]
|
#[derive(Eq, PartialEq, Debug)]
|
||||||
pub enum BindGroupStatus {
|
pub enum BindGroupStatus {
|
||||||
Changed(BindGroupId),
|
Changed(BindGroupId),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user