From d11be437cb79c06f8594384d0a87a925dcff90cc Mon Sep 17 00:00:00 2001 From: Vladyslav Batyrenko Date: Sat, 21 Nov 2020 21:52:44 +0200 Subject: [PATCH] Switch to default PartialEq implementation for RenderResourceBinding (#877) * Switch to default PartialEq implementation for RenderResourceBinding * Move specialized RenderResourceBinding Hash implementation to BindGroupBuilder --- .../renderer/render_resource/bind_group.rs | 23 +++++++- .../render_resource_bindings.rs | 55 +------------------ 2 files changed, 24 insertions(+), 54 deletions(-) diff --git a/crates/bevy_render/src/renderer/render_resource/bind_group.rs b/crates/bevy_render/src/renderer/render_resource/bind_group.rs index 97c4f1edab..70f5974c81 100644 --- a/crates/bevy_render/src/renderer/render_resource/bind_group.rs +++ b/crates/bevy_render/src/renderer/render_resource/bind_group.rs @@ -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); + } + } + } } diff --git a/crates/bevy_render/src/renderer/render_resource/render_resource_bindings.rs b/crates/bevy_render/src/renderer/render_resource/render_resource_bindings.rs index 70d3fd0929..a09dfe86a6 100644 --- a/crates/bevy_render/src/renderer/render_resource/render_resource_bindings.rs +++ b/crates/bevy_render/src/renderer/render_resource/render_resource_bindings.rs @@ -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(&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),