diff --git a/examples/shader/gpu_readback.rs b/examples/shader/gpu_readback.rs index a74b6def409f4..248f81193599f 100644 --- a/examples/shader/gpu_readback.rs +++ b/examples/shader/gpu_readback.rs @@ -5,6 +5,7 @@ use bevy::{ asset::RenderAssetUsages, prelude::*, render::{ + Render, RenderApp, RenderStartup, RenderSystems, extract_resource::{ExtractResource, ExtractResourcePlugin}, gpu_readback::{Readback, ReadbackComplete}, render_asset::RenderAssets, @@ -12,15 +13,14 @@ use bevy::{ binding_types::{storage_buffer, texture_storage_2d}, *, }, - renderer::{RenderContext, RenderDevice, RenderGraph}, - storage::{GpuShaderBuffer, ShaderBuffer}, + renderer::RenderDevice, + storage::{GpuShaderStorageBuffer, ShaderStorageBuffer}, texture::GpuImage, - Render, RenderApp, RenderStartup, RenderSystems, }, }; /// 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 +54,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 +67,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 +146,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,19 +194,21 @@ 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 { - label: Some("GPU readback compute pass"), - ..default() - }); + 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() + }); pass.set_bind_group(0, &bind_group.0, &[]); pass.set_pipeline(init_pipeline);