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 std::{
|
||||
hash::{Hash, Hasher},
|
||||
@ -45,7 +45,7 @@ impl BindGroupBuilder {
|
||||
self.dynamic_uniform_indices.push(dynamic_index);
|
||||
}
|
||||
|
||||
binding.hash(&mut self.hasher);
|
||||
self.hash_binding(&binding);
|
||||
self.indexed_bindings.push(IndexedBindGroupEntry {
|
||||
index,
|
||||
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::{
|
||||
pipeline::{BindGroupDescriptor, BindGroupDescriptorId, PipelineDescriptor},
|
||||
renderer::RenderResourceContext,
|
||||
};
|
||||
use bevy_asset::{Asset, Handle, HandleUntyped};
|
||||
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 {
|
||||
Buffer {
|
||||
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)]
|
||||
pub enum BindGroupStatus {
|
||||
Changed(BindGroupId),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user