From e26d1e83d5b0af2bb6bc008cdc34d014ece12fc0 Mon Sep 17 00:00:00 2001 From: harlanexquiso <168396589+harlanexquiso@users.noreply.github.com> Date: Mon, 11 May 2026 21:57:56 -0600 Subject: [PATCH 1/3] Update gpu_readback.rs Updates this example to work with the recent changes to render graphs --- examples/shader/gpu_readback.rs | 43 ++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/examples/shader/gpu_readback.rs b/examples/shader/gpu_readback.rs index a74b6def409f4..46ebf25698957 100644 --- a/examples/shader/gpu_readback.rs +++ b/examples/shader/gpu_readback.rs @@ -5,22 +5,25 @@ use bevy::{ asset::RenderAssetUsages, prelude::*, render::{ - extract_resource::{ExtractResource, ExtractResourcePlugin}, - gpu_readback::{Readback, ReadbackComplete}, - render_asset::RenderAssets, + Render, + RenderApp, + RenderStartup, + RenderSystems, + extract_resource::{ExtractResource, ExtractResourcePlugin}, + gpu_readback::{Readback, ReadbackComplete}, + render_asset::RenderAssets, render_resource::{ binding_types::{storage_buffer, texture_storage_2d}, *, - }, - renderer::{RenderContext, RenderDevice, RenderGraph}, - storage::{GpuShaderBuffer, ShaderBuffer}, - texture::GpuImage, - Render, RenderApp, RenderStartup, RenderSystems, + }, + renderer::RenderDevice, + storage::{GpuShaderStorageBuffer, ShaderStorageBuffer}, + texture::GpuImage }, }; /// This example uses a shader source file from the assets subdirectory -const SHADER_ASSET_PATH: &str = "shaders/gpu_readback.wgsl"; +const SHADER_ASSET_PATH: &str = "gpu_readback.wgsl"; // The length of the buffer sent to the gpu const BUFFER_LEN: usize = 16; @@ -54,12 +57,12 @@ impl Plugin for GpuReadbackPlugin { // We don't need to recreate the bind group every frame .run_if(not(resource_exists::)), ) - .add_systems(RenderGraph, compute); + .add_systems(Last, compute); } } #[derive(Resource, ExtractResource, Clone)] -struct ReadbackBuffer(Handle); +struct ReadbackBuffer(Handle); #[derive(Resource, ExtractResource, Clone)] struct ReadbackImage(Handle); @@ -67,11 +70,11 @@ struct ReadbackImage(Handle); fn setup( mut commands: Commands, mut images: ResMut>, - mut buffers: ResMut>, + mut buffers: ResMut>, ) { // Create a storage buffer with some data let buffer: Vec = (0..BUFFER_LEN as u32).collect(); - let mut buffer = ShaderBuffer::from(buffer); + let mut buffer = ShaderStorageBuffer::from(buffer); // We need to enable the COPY_SRC usage so we can copy the buffer to the cpu buffer.buffer_description.usage |= BufferUsages::COPY_SRC; let buffer = buffers.add(buffer); @@ -146,7 +149,7 @@ fn prepare_bind_group( pipeline_cache: Res, buffer: Res, image: Res, - buffers: Res>, + buffers: Res>, images: Res>, ) { let buffer = buffers.get(&buffer.0).unwrap(); @@ -194,16 +197,18 @@ fn init_compute_pipeline( } fn compute( - mut render_context: RenderContext, + render_context: Res, pipeline_cache: Res, pipeline: Res, bind_group: Res, ) { if let Some(init_pipeline) = pipeline_cache.get_compute_pipeline(pipeline.pipeline) { - let mut pass = - render_context - .command_encoder() - .begin_compute_pass(&ComputePassDescriptor { + let mut context = render_context.create_command_encoder(&CommandEncoderDescriptor { + label: Some("Command Encoder"), + ..default() + }); + + let mut pass = context.begin_compute_pass(&ComputePassDescriptor { label: Some("GPU readback compute pass"), ..default() }); From 16f186d49d4dad820835990e201d1272b2f34d96 Mon Sep 17 00:00:00 2001 From: harlanexquiso <168396589+harlanexquiso@users.noreply.github.com> Date: Mon, 11 May 2026 22:15:35 -0600 Subject: [PATCH 2/3] Update gpu_readback.rs From 4ea049f2426199dda42d76f969b48142dce36572 Mon Sep 17 00:00:00 2001 From: harlanexquiso <168396589+harlanexquiso@users.noreply.github.com> Date: Mon, 11 May 2026 22:20:03 -0600 Subject: [PATCH 3/3] Update gpu_readback.rs --- examples/shader/gpu_readback.rs | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/examples/shader/gpu_readback.rs b/examples/shader/gpu_readback.rs index 46ebf25698957..248f81193599f 100644 --- a/examples/shader/gpu_readback.rs +++ b/examples/shader/gpu_readback.rs @@ -5,20 +5,17 @@ use bevy::{ asset::RenderAssetUsages, prelude::*, render::{ - Render, - RenderApp, - RenderStartup, - RenderSystems, - extract_resource::{ExtractResource, ExtractResourcePlugin}, - gpu_readback::{Readback, ReadbackComplete}, - render_asset::RenderAssets, + Render, RenderApp, RenderStartup, RenderSystems, + extract_resource::{ExtractResource, ExtractResourcePlugin}, + gpu_readback::{Readback, ReadbackComplete}, + render_asset::RenderAssets, render_resource::{ binding_types::{storage_buffer, texture_storage_2d}, *, - }, - renderer::RenderDevice, - storage::{GpuShaderStorageBuffer, ShaderStorageBuffer}, - texture::GpuImage + }, + renderer::RenderDevice, + storage::{GpuShaderStorageBuffer, ShaderStorageBuffer}, + texture::GpuImage, }, }; @@ -203,15 +200,15 @@ fn compute( bind_group: Res, ) { if let Some(init_pipeline) = pipeline_cache.get_compute_pipeline(pipeline.pipeline) { - let mut context = render_context.create_command_encoder(&CommandEncoderDescriptor { + let mut context = render_context.create_command_encoder(&CommandEncoderDescriptor { label: Some("Command Encoder"), - ..default() + ..default() }); let mut pass = context.begin_compute_pass(&ComputePassDescriptor { - label: Some("GPU readback compute pass"), - ..default() - }); + label: Some("GPU readback compute pass"), + ..default() + }); pass.set_bind_group(0, &bind_group.0, &[]); pass.set_pipeline(init_pipeline);