From 3786224b28df2e5080eecdbdf32d51d098d1dcfd Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Sun, 14 Jun 2020 15:22:31 -0700 Subject: [PATCH] render: replace ResourceInfo with ResourceType --- crates/bevy_derive/src/render_resource.rs | 4 ++-- crates/bevy_render/src/color.rs | 2 +- crates/bevy_render/src/render_graph/graph.rs | 8 +++---- .../bevy_render/src/render_graph/node_slot.rs | 8 +++---- .../src/render_graph/nodes/pass_node.rs | 6 ++--- .../nodes/render_resources_node.rs | 14 +++++------ .../nodes/window_swapchain_node.rs | 4 ++-- .../render_graph/nodes/window_texture_node.rs | 4 ++-- .../bevy_render/src/render_graph/schedule.rs | 7 +++--- .../bevy_render/src/render_resource/buffer.rs | 14 +++++++++++ crates/bevy_render/src/render_resource/mod.rs | 2 -- .../src/render_resource/render_resource.rs | 20 +++++++++++----- .../src/render_resource/resource_info.rs | 23 ------------------- crates/bevy_render/src/texture/texture.rs | 10 ++++---- 14 files changed, 61 insertions(+), 65 deletions(-) delete mode 100644 crates/bevy_render/src/render_resource/resource_info.rs diff --git a/crates/bevy_derive/src/render_resource.rs b/crates/bevy_derive/src/render_resource.rs index 6a6a063df1..398f4cc00a 100644 --- a/crates/bevy_derive/src/render_resource.rs +++ b/crates/bevy_derive/src/render_resource.rs @@ -14,8 +14,8 @@ pub fn derive_render_resource(input: TokenStream) -> TokenStream { TokenStream::from(quote! { impl #bevy_render_path::render_resource::RenderResource for #struct_name { - fn resource_info(&self) -> Option<#bevy_render_path::render_resource::ResourceInfo> { - Some(#bevy_render_path::render_resource::ResourceInfo::Buffer(None)) + fn resource_type(&self) -> Option<#bevy_render_path::render_resource::ResourceType> { + Some(#bevy_render_path::render_resource::ResourceType::Buffer) } fn write_buffer_bytes(&self, buffer: &mut [u8]) { use #bevy_core_path::bytes::Bytes; diff --git a/crates/bevy_render/src/color.rs b/crates/bevy_render/src/color.rs index 2f03c83e13..c6ff7a1b0d 100644 --- a/crates/bevy_render/src/color.rs +++ b/crates/bevy_render/src/color.rs @@ -1,5 +1,5 @@ use super::texture::Texture; -use crate::{render_resource::{ResourceInfo, RenderResource}, impl_render_resource_bytes}; +use crate::{render_resource::{ResourceType, RenderResource}, impl_render_resource_bytes}; use bevy_asset::Handle; use bevy_core::bytes::{Byteable, Bytes}; use bevy_property::Property; diff --git a/crates/bevy_render/src/render_graph/graph.rs b/crates/bevy_render/src/render_graph/graph.rs index 0a2e4db4a8..16bff3a552 100644 --- a/crates/bevy_render/src/render_graph/graph.rs +++ b/crates/bevy_render/src/render_graph/graph.rs @@ -202,7 +202,7 @@ impl RenderGraph { }); } - if output_slot.info.resource_info != input_slot.info.resource_info { + if output_slot.info.resource_type != input_slot.info.resource_type { return Err(RenderGraphError::MismatchedNodeSlots { output_node, output_slot: output_index, @@ -309,7 +309,7 @@ mod tests { use super::RenderGraph; use crate::{ render_graph::{Edge, Node, NodeId, RenderGraphError, ResourceSlotInfo, ResourceSlots}, - renderer::RenderContext, render_resource::ResourceInfo, + renderer::RenderContext, render_resource::ResourceType, }; use legion::prelude::{Resources, World}; use std::{collections::HashSet, iter::FromIterator}; @@ -326,13 +326,13 @@ mod tests { inputs: (0..inputs) .map(|i| ResourceSlotInfo { name: format!("in_{}", i).into(), - resource_info: ResourceInfo::Texture(None), + resource_type: ResourceType::Texture, }) .collect(), outputs: (0..outputs) .map(|i| ResourceSlotInfo { name: format!("out_{}", i).into(), - resource_info: ResourceInfo::Texture(None), + resource_type: ResourceType::Texture, }) .collect(), } diff --git a/crates/bevy_render/src/render_graph/node_slot.rs b/crates/bevy_render/src/render_graph/node_slot.rs index 39dc83a943..87840c0df2 100644 --- a/crates/bevy_render/src/render_graph/node_slot.rs +++ b/crates/bevy_render/src/render_graph/node_slot.rs @@ -1,5 +1,5 @@ use super::RenderGraphError; -use crate::render_resource::{RenderResourceId, ResourceInfo}; +use crate::render_resource::{RenderResourceId, ResourceType}; use std::borrow::Cow; #[derive(Debug, Clone)] @@ -122,14 +122,14 @@ impl From<&[ResourceSlotInfo]> for ResourceSlots { #[derive(Clone, Debug)] pub struct ResourceSlotInfo { pub name: Cow<'static, str>, - pub resource_info: ResourceInfo, + pub resource_type: ResourceType, } impl ResourceSlotInfo { - pub fn new(name: impl Into>, resource_info: ResourceInfo) -> Self { + pub fn new(name: impl Into>, resource_type: ResourceType) -> Self { ResourceSlotInfo { name: name.into(), - resource_info, + resource_type, } } } diff --git a/crates/bevy_render/src/render_graph/nodes/pass_node.rs b/crates/bevy_render/src/render_graph/nodes/pass_node.rs index ee75fc4776..fc03525160 100644 --- a/crates/bevy_render/src/render_graph/nodes/pass_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/pass_node.rs @@ -3,7 +3,7 @@ use crate::{ pass::{PassDescriptor, TextureAttachment}, pipeline::PipelineDescriptor, render_graph::{Node, ResourceSlotInfo, ResourceSlots}, - render_resource::{BufferId, RenderResourceBindings, BindGroupId, ResourceInfo}, + render_resource::{BufferId, RenderResourceBindings, BindGroupId, ResourceType}, renderer::RenderContext, }; use bevy_asset::{Assets, Handle}; @@ -24,7 +24,7 @@ impl MainPassNode { if let TextureAttachment::Input(ref name) = color_attachment.attachment { inputs.push(ResourceSlotInfo::new( name.to_string(), - ResourceInfo::Texture(None), + ResourceType::Texture, )); color_attachment_input_indices.push(Some(inputs.len() - 1)); } else { @@ -37,7 +37,7 @@ impl MainPassNode { if let TextureAttachment::Input(ref name) = depth_stencil_attachment.attachment { inputs.push(ResourceSlotInfo::new( name.to_string(), - ResourceInfo::Texture(None), + ResourceType::Texture, )); depth_stencil_attachment_input_index = Some(inputs.len() - 1); } diff --git a/crates/bevy_render/src/render_graph/nodes/render_resources_node.rs b/crates/bevy_render/src/render_graph/nodes/render_resources_node.rs index 573302faf4..c375c10456 100644 --- a/crates/bevy_render/src/render_graph/nodes/render_resources_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/render_resources_node.rs @@ -11,7 +11,7 @@ use crate::{ use bevy_asset::{Assets, Handle}; use legion::prelude::*; -use render_resource::{BufferId, ResourceInfo}; +use render_resource::{BufferId, ResourceType}; use std::{collections::HashMap, marker::PhantomData}; pub const BIND_BUFFER_ALIGNMENT: usize = 256; @@ -97,7 +97,7 @@ where .resize_with(uniforms.render_resources_len(), || None); } for (i, render_resource) in uniforms.iter_render_resources().enumerate() { - if let Some(ResourceInfo::Buffer(_)) = render_resource.resource_info() { + if let Some(ResourceType::Buffer) = render_resource.resource_type() { let render_resource_name = uniforms.get_render_resource_name(i).unwrap(); let size = render_resource.buffer_byte_len().unwrap(); if let Some((ref _name, ref mut buffer_array_status)) = self.uniform_arrays[i] { @@ -201,8 +201,8 @@ where staging_buffer: &mut [u8], ) { for (i, render_resource) in uniforms.iter_render_resources().enumerate() { - match render_resource.resource_info() { - Some(ResourceInfo::Buffer(_)) => { + match render_resource.resource_type() { + Some(ResourceType::Buffer) => { let size = render_resource.buffer_byte_len().unwrap(); let render_resource_name = uniforms.get_render_resource_name(i).unwrap(); let (_name, uniform_buffer_status) = self.uniform_arrays[i].as_mut().unwrap(); @@ -293,8 +293,8 @@ where }); uniform_buffer_status.current_offset += size; } - Some(ResourceInfo::Texture(_)) => { /* ignore textures */ } - Some(ResourceInfo::Sampler) => { /* ignore samplers */ } + Some(ResourceType::Texture) => { /* ignore textures */ } + Some(ResourceType::Sampler) => { /* ignore samplers */ } None => { /* ignore None */ } } } @@ -616,7 +616,7 @@ fn setup_uniform_texture_resources( T: render_resource::RenderResources, { for (i, render_resource) in uniforms.iter_render_resources().enumerate() { - if let Some(ResourceInfo::Texture(_)) = render_resource.resource_info() { + if let Some(ResourceType::Texture) = render_resource.resource_type() { let render_resource_name = uniforms.get_render_resource_name(i).unwrap(); let sampler_name = format!("{}_sampler", render_resource_name); if let Some(texture_handle) = render_resource.texture() { diff --git a/crates/bevy_render/src/render_graph/nodes/window_swapchain_node.rs b/crates/bevy_render/src/render_graph/nodes/window_swapchain_node.rs index 67f3332be2..808f820f3a 100644 --- a/crates/bevy_render/src/render_graph/nodes/window_swapchain_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/window_swapchain_node.rs @@ -1,6 +1,6 @@ use crate::{ render_graph::{Node, ResourceSlotInfo, ResourceSlots}, - render_resource::{RenderResourceId, ResourceInfo}, + render_resource::{RenderResourceId, ResourceType}, renderer::RenderContext, }; use bevy_app::{EventReader, Events}; @@ -29,7 +29,7 @@ impl Node for WindowSwapChainNode { fn output(&self) -> &[ResourceSlotInfo] { static OUTPUT: &[ResourceSlotInfo] = &[ResourceSlotInfo { name: Cow::Borrowed(WindowSwapChainNode::OUT_TEXTURE), - resource_info: ResourceInfo::Texture(None), + resource_type: ResourceType::Texture, }]; OUTPUT } diff --git a/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs b/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs index d3029ab80e..932590502c 100644 --- a/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs @@ -1,6 +1,6 @@ use crate::{ render_graph::{Node, ResourceSlotInfo, ResourceSlots}, - render_resource::{RenderResourceId, ResourceInfo}, + render_resource::{RenderResourceId, ResourceType}, renderer::RenderContext, texture::TextureDescriptor, }; @@ -32,7 +32,7 @@ impl Node for WindowTextureNode { fn output(&self) -> &[ResourceSlotInfo] { static OUTPUT: &[ResourceSlotInfo] = &[ResourceSlotInfo { name: Cow::Borrowed(WindowTextureNode::OUT_TEXTURE), - resource_info: ResourceInfo::Texture(None), + resource_type: ResourceType::Texture, }]; OUTPUT } diff --git a/crates/bevy_render/src/render_graph/schedule.rs b/crates/bevy_render/src/render_graph/schedule.rs index 1978af3c5f..77097c9c63 100644 --- a/crates/bevy_render/src/render_graph/schedule.rs +++ b/crates/bevy_render/src/render_graph/schedule.rs @@ -264,8 +264,7 @@ mod tests { use super::{DependentNodeStager, OrderedJob, RenderGraphStager, Stage}; use crate::{ render_graph::{Node, NodeId, RenderGraph, ResourceSlotInfo, ResourceSlots}, - render_resource::ResourceInfo, - renderer::RenderContext, + renderer::RenderContext, render_resource::ResourceType, }; use legion::prelude::{Resources, World}; @@ -280,13 +279,13 @@ mod tests { inputs: (0..inputs) .map(|i| ResourceSlotInfo { name: format!("in_{}", i).into(), - resource_info: ResourceInfo::Texture(None), + resource_type: ResourceType::Texture, }) .collect(), outputs: (0..outputs) .map(|i| ResourceSlotInfo { name: format!("out_{}", i).into(), - resource_info: ResourceInfo::Texture(None), + resource_type: ResourceType::Texture, }) .collect(), } diff --git a/crates/bevy_render/src/render_resource/buffer.rs b/crates/bevy_render/src/render_resource/buffer.rs index 0fb5f424be..a62c157680 100644 --- a/crates/bevy_render/src/render_resource/buffer.rs +++ b/crates/bevy_render/src/render_resource/buffer.rs @@ -9,6 +9,20 @@ impl BufferId { } } +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct BufferInfo { + pub size: usize, + pub buffer_usage: BufferUsage, +} + +impl Default for BufferInfo { + fn default() -> Self { + BufferInfo { + size: 0, + buffer_usage: BufferUsage::empty(), + } + } +} bitflags::bitflags! { #[repr(transparent)] diff --git a/crates/bevy_render/src/render_resource/mod.rs b/crates/bevy_render/src/render_resource/mod.rs index 6120a27599..585a6a92d2 100644 --- a/crates/bevy_render/src/render_resource/mod.rs +++ b/crates/bevy_render/src/render_resource/mod.rs @@ -4,7 +4,6 @@ mod shared_buffer; mod render_resource; mod bind_group; mod render_resource_bindings; -mod resource_info; mod systems; pub use buffer::*; @@ -13,5 +12,4 @@ pub use shared_buffer::*; pub use render_resource::*; pub use bind_group::*; pub use render_resource_bindings::*; -pub use resource_info::*; pub use systems::*; \ No newline at end of file diff --git a/crates/bevy_render/src/render_resource/render_resource.rs b/crates/bevy_render/src/render_resource/render_resource.rs index 6fc8544ab9..400400c44c 100644 --- a/crates/bevy_render/src/render_resource/render_resource.rs +++ b/crates/bevy_render/src/render_resource/render_resource.rs @@ -1,4 +1,4 @@ -use super::{BufferId, ResourceInfo, SamplerId, TextureId}; +use super::{BufferId, SamplerId, TextureId}; use crate::texture::Texture; use bevy_asset::Handle; @@ -6,6 +6,14 @@ use bevy_core::bytes::{Byteable, Bytes}; pub use bevy_derive::{RenderResource, RenderResources}; use glam::{Mat4, Vec2, Vec3, Vec4}; + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum ResourceType { + Buffer, + Texture, + Sampler, +} + #[derive(Debug, Clone, Hash, Eq, PartialEq)] pub enum RenderResourceId { Buffer(BufferId), @@ -65,7 +73,7 @@ bitflags::bitflags! { } pub trait RenderResource { - fn resource_info(&self) -> Option; + fn resource_type(&self) -> Option; fn write_buffer_bytes(&self, buffer: &mut [u8]); fn buffer_byte_len(&self) -> Option; // TODO: consider making these panic by default, but return non-options @@ -115,8 +123,8 @@ impl<'a> Iterator for RenderResourceIterator<'a> { macro_rules! impl_render_resource_bytes { ($ty:ident) => { impl RenderResource for $ty { - fn resource_info(&self) -> Option { - Some(ResourceInfo::Buffer(None)) + fn resource_type(&self) -> Option { + Some(ResourceType::Buffer) } fn write_buffer_bytes(&self, buffer: &mut [u8]) { self.write_bytes(buffer); @@ -151,8 +159,8 @@ impl RenderResource for Vec where T: Sized + Byteable, { - fn resource_info(&self) -> Option { - Some(ResourceInfo::Buffer(None)) + fn resource_type(&self) -> Option { + Some(ResourceType::Buffer) } fn write_buffer_bytes(&self, buffer: &mut [u8]) { self.write_bytes(buffer); diff --git a/crates/bevy_render/src/render_resource/resource_info.rs b/crates/bevy_render/src/render_resource/resource_info.rs deleted file mode 100644 index d6214147f1..0000000000 --- a/crates/bevy_render/src/render_resource/resource_info.rs +++ /dev/null @@ -1,23 +0,0 @@ -use crate::{render_resource::BufferUsage, texture::TextureDescriptor}; - -#[derive(Debug, Clone, Eq, PartialEq)] -pub struct BufferInfo { - pub size: usize, - pub buffer_usage: BufferUsage, -} - -impl Default for BufferInfo { - fn default() -> Self { - BufferInfo { - size: 0, - buffer_usage: BufferUsage::empty(), - } - } -} - -#[derive(Debug, Clone, Eq, PartialEq)] -pub enum ResourceInfo { - Buffer(Option), - Texture(Option), - Sampler, -} \ No newline at end of file diff --git a/crates/bevy_render/src/texture/texture.rs b/crates/bevy_render/src/texture/texture.rs index 1063692eff..82337ea9cb 100644 --- a/crates/bevy_render/src/texture/texture.rs +++ b/crates/bevy_render/src/texture/texture.rs @@ -1,6 +1,6 @@ use super::{SamplerDescriptor, TextureDescriptor}; use crate::{ - render_resource::{RenderResource, RenderResourceId, ResourceInfo}, + render_resource::{RenderResource, RenderResourceId, ResourceType}, renderer::RenderResourceContext, }; use bevy_app::{EventReader, Events}; @@ -118,8 +118,8 @@ pub struct TextureResourceSystemState { } impl RenderResource for Option> { - fn resource_info(&self) -> Option { - self.map(|_texture| ResourceInfo::Texture(None)) + fn resource_type(&self) -> Option { + self.map(|_texture| ResourceType::Texture) } fn write_buffer_bytes(&self, _buffer: &mut [u8]) {} fn buffer_byte_len(&self) -> Option { @@ -131,8 +131,8 @@ impl RenderResource for Option> { } impl RenderResource for Handle { - fn resource_info(&self) -> Option { - Some(ResourceInfo::Texture(None)) + fn resource_type(&self) -> Option { + Some(ResourceType::Texture) } fn write_buffer_bytes(&self, _buffer: &mut [u8]) {} fn buffer_byte_len(&self) -> Option {