From ae65b708fa25739e214f0f062d592fe245e83643 Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:58:36 +0200 Subject: [PATCH] extract `set_index_buffer` from `render_pass_end_impl` --- wgpu-core/src/command/render.rs | 87 ++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/wgpu-core/src/command/render.rs b/wgpu-core/src/command/render.rs index d788e2b7d5..2bff56d5f3 100644 --- a/wgpu-core/src/command/render.rs +++ b/wgpu-core/src/command/render.rs @@ -1542,48 +1542,9 @@ impl Global { offset, size, } => { - api_log!("RenderPass::set_index_buffer {}", buffer.error_ident()); - let scope = PassErrorScope::SetIndexBuffer(buffer.as_info().id()); - - state - .info - .usage_scope - .buffers - .merge_single(&buffer, hal::BufferUses::INDEX) + set_index_buffer(&mut state, &cmd_buf, buffer, index_format, offset, size) .map_pass_err(scope)?; - - buffer - .same_device_as(cmd_buf.as_ref()) - .map_pass_err(scope)?; - - buffer - .check_usage(BufferUsages::INDEX) - .map_pass_err(scope)?; - let buf_raw = buffer.try_raw(state.snatch_guard).map_pass_err(scope)?; - - let end = match size { - Some(s) => offset + s.get(), - None => buffer.size, - }; - state.index.update_buffer(offset..end, index_format); - - state.buffer_memory_init_actions.extend( - buffer.initialization_status.read().create_action( - &buffer, - offset..end, - MemoryInitKind::NeedsInitializedMemory, - ), - ); - - let bb = hal::BufferBinding { - buffer: buf_raw, - offset, - size, - }; - unsafe { - state.raw_encoder.set_index_buffer(bb, index_format); - } } ArcRenderCommand::SetVertexBuffer { slot, @@ -2552,6 +2513,52 @@ fn set_pipeline( Ok(()) } +fn set_index_buffer( + state: &mut State, + cmd_buf: &Arc>, + buffer: Arc>, + index_format: IndexFormat, + offset: u64, + size: Option, +) -> Result<(), RenderPassErrorInner> { + api_log!("RenderPass::set_index_buffer {}", buffer.error_ident()); + + state + .info + .usage_scope + .buffers + .merge_single(&buffer, hal::BufferUses::INDEX)?; + + buffer.same_device_as(cmd_buf.as_ref())?; + + buffer.check_usage(BufferUsages::INDEX)?; + let buf_raw = buffer.try_raw(state.snatch_guard)?; + + let end = match size { + Some(s) => offset + s.get(), + None => buffer.size, + }; + state.index.update_buffer(offset..end, index_format); + + state + .buffer_memory_init_actions + .extend(buffer.initialization_status.read().create_action( + &buffer, + offset..end, + MemoryInitKind::NeedsInitializedMemory, + )); + + let bb = hal::BufferBinding { + buffer: buf_raw, + offset, + size, + }; + unsafe { + state.raw_encoder.set_index_buffer(bb, index_format); + } + Ok(()) +} + impl Global { pub fn render_pass_set_bind_group( &self,