From 105c7abfc89af415698a7f4032c6057ee7dae2f8 Mon Sep 17 00:00:00 2001 From: Zhixing Zhang Date: Mon, 25 Jan 2021 23:53:33 -0500 Subject: [PATCH] RenderCommand --- crates/bevy_render/src/draw.rs | 14 ++++++++++++++ .../src/render_graph/nodes/pass_node.rs | 7 +++++++ 2 files changed, 21 insertions(+) diff --git a/crates/bevy_render/src/draw.rs b/crates/bevy_render/src/draw.rs index ab6c6192465bd2..7ece1978c80eee 100644 --- a/crates/bevy_render/src/draw.rs +++ b/crates/bevy_render/src/draw.rs @@ -13,6 +13,7 @@ use bevy_ecs::{Query, Res, ResMut, SystemParam}; use bevy_reflect::{Reflect, ReflectComponent}; use std::{ops::Range, sync::Arc}; use thiserror::Error; +use crate::pipeline::BindingShaderStage; /// A queued command for the renderer #[derive(Debug, Clone, Eq, PartialEq)] @@ -35,6 +36,11 @@ pub enum RenderCommand { bind_group: BindGroupId, dynamic_uniform_indices: Option>, }, + SetPushConstants { + stages: BindingShaderStage, + offset: u32, + data: Arc<[u8]> + }, DrawIndexed { indices: Range, base_vertex: i32, @@ -106,6 +112,14 @@ impl Draw { }); } + pub fn set_push_constants(&mut self, stages: BindingShaderStage, offset: u32, data: Arc<[u8]>) { + self.render_command(RenderCommand::SetPushConstants { + stages, + offset, + data, + }); + } + pub fn set_bind_group(&mut self, index: u32, bind_group: &BindGroup) { self.render_command(RenderCommand::SetBindGroup { index, 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 2db0058ac52b4c..526b6e3dbfb77e 100644 --- a/crates/bevy_render/src/render_graph/nodes/pass_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/pass_node.rs @@ -329,6 +329,13 @@ where ); draw_state.set_bind_group(*index, *bind_group); } + RenderCommand::SetPushConstants { + stages, + offset, + data, + } => { + render_pass.set_push_constants(*stages, *offset, data); + } } } }