Path: blob/main/crates/bevy_solari/src/realtime/node.rs
9367 views
use super::{1prepare::{SolariLightingResources, LIGHT_TILE_BLOCKS, WORLD_CACHE_SIZE},2SolariLighting,3};4use crate::scene::RaytracingSceneBindings;5#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]6use bevy_anti_alias::dlss::ViewDlssRayReconstructionTextures;7use bevy_asset::{load_embedded_asset, AssetServer, Handle};8use bevy_core_pipeline::prepass::{9PreviousViewData, PreviousViewUniformOffset, PreviousViewUniforms, ViewPrepassTextures,10};11use bevy_diagnostic::FrameCount;12use bevy_ecs::{prelude::*, resource::Resource, system::Commands};13use bevy_render::{14diagnostic::RecordDiagnostics as _,15render_resource::{16binding_types::{17storage_buffer_sized, texture_2d, texture_depth_2d, texture_storage_2d, uniform_buffer,18},19BindGroupEntries, BindGroupLayoutDescriptor, BindGroupLayoutEntries,20CachedComputePipelineId, ComputePassDescriptor, ComputePipelineDescriptor, LoadOp,21PipelineCache, RenderPassDescriptor, ShaderStages, StorageTextureAccess, TextureFormat,22TextureSampleType,23},24renderer::{RenderContext, RenderDevice, ViewQuery},25view::{ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms},26};27use bevy_shader::{Shader, ShaderDefVal};28use bevy_utils::default;2930/// Resource holding the Solari lighting pipeline configuration.31#[derive(Resource)]32pub struct SolariLightingPipelines {33bind_group_layout: BindGroupLayoutDescriptor,34bind_group_layout_world_cache_active_cells_dispatch: BindGroupLayoutDescriptor,35#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]36bind_group_layout_resolve_dlss_rr_textures: BindGroupLayoutDescriptor,37decay_world_cache_pipeline: CachedComputePipelineId,38compact_world_cache_single_block_pipeline: CachedComputePipelineId,39compact_world_cache_blocks_pipeline: CachedComputePipelineId,40compact_world_cache_write_active_cells_pipeline: CachedComputePipelineId,41sample_di_for_world_cache_pipeline: CachedComputePipelineId,42sample_gi_for_world_cache_pipeline: CachedComputePipelineId,43blend_new_world_cache_samples_pipeline: CachedComputePipelineId,44presample_light_tiles_pipeline: CachedComputePipelineId,45di_initial_and_temporal_pipeline: CachedComputePipelineId,46di_spatial_and_shade_pipeline: CachedComputePipelineId,47gi_initial_and_temporal_pipeline: CachedComputePipelineId,48gi_spatial_and_shade_pipeline: CachedComputePipelineId,49specular_gi_pipeline: CachedComputePipelineId,50#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]51specular_gi_with_psr_pipeline: CachedComputePipelineId,52#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]53resolve_dlss_rr_textures_pipeline: CachedComputePipelineId,54}5556#[cfg(any(not(feature = "dlss"), feature = "force_disable_dlss"))]57type SolariLightingViewQuery = (58&'static SolariLighting,59&'static SolariLightingResources,60&'static ViewTarget,61&'static ViewPrepassTextures,62&'static ViewUniformOffset,63&'static PreviousViewUniformOffset,64);6566#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]67type SolariLightingViewQuery = (68&'static SolariLighting,69&'static SolariLightingResources,70&'static ViewTarget,71&'static ViewPrepassTextures,72&'static ViewUniformOffset,73&'static PreviousViewUniformOffset,74Option<&'static ViewDlssRayReconstructionTextures>,75);7677pub fn solari_lighting(78view: ViewQuery<SolariLightingViewQuery>,79solari_pipelines: Option<Res<SolariLightingPipelines>>,80pipeline_cache: Res<PipelineCache>,81scene_bindings: Res<RaytracingSceneBindings>,82view_uniforms: Res<ViewUniforms>,83previous_view_uniforms: Res<PreviousViewUniforms>,84frame_count: Res<FrameCount>,85render_device: Res<RenderDevice>,86mut ctx: RenderContext,87) {88#[cfg(any(not(feature = "dlss"), feature = "force_disable_dlss"))]89let (90solari_lighting,91solari_lighting_resources,92view_target,93view_prepass_textures,94view_uniform_offset,95previous_view_uniform_offset,96) = view.into_inner();9798#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]99let (100solari_lighting,101solari_lighting_resources,102view_target,103view_prepass_textures,104view_uniform_offset,105previous_view_uniform_offset,106view_dlss_rr_textures,107) = view.into_inner();108109let Some(pipelines) = solari_pipelines else {110return;111};112113#[cfg(not(all(feature = "dlss", not(feature = "force_disable_dlss"))))]114let specular_gi_pipeline = pipelines.specular_gi_pipeline;115#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]116let specular_gi_pipeline = if view_dlss_rr_textures.is_some() {117pipelines.specular_gi_with_psr_pipeline118} else {119pipelines.specular_gi_pipeline120};121122let (123Some(decay_world_cache_pipeline),124Some(compact_world_cache_single_block_pipeline),125Some(compact_world_cache_blocks_pipeline),126Some(compact_world_cache_write_active_cells_pipeline),127Some(sample_di_for_world_cache_pipeline),128Some(sample_gi_for_world_cache_pipeline),129Some(blend_new_world_cache_samples_pipeline),130Some(presample_light_tiles_pipeline),131Some(di_initial_and_temporal_pipeline),132Some(di_spatial_and_shade_pipeline),133Some(gi_initial_and_temporal_pipeline),134Some(gi_spatial_and_shade_pipeline),135Some(specular_gi_pipeline),136Some(scene_bind_group),137Some(gbuffer),138Some(depth_buffer),139Some(motion_vectors),140Some(previous_gbuffer),141Some(previous_depth_buffer),142Some(view_uniforms_binding),143Some(previous_view_uniforms_binding),144) = (145pipeline_cache.get_compute_pipeline(pipelines.decay_world_cache_pipeline),146pipeline_cache.get_compute_pipeline(pipelines.compact_world_cache_single_block_pipeline),147pipeline_cache.get_compute_pipeline(pipelines.compact_world_cache_blocks_pipeline),148pipeline_cache149.get_compute_pipeline(pipelines.compact_world_cache_write_active_cells_pipeline),150pipeline_cache.get_compute_pipeline(pipelines.sample_di_for_world_cache_pipeline),151pipeline_cache.get_compute_pipeline(pipelines.sample_gi_for_world_cache_pipeline),152pipeline_cache.get_compute_pipeline(pipelines.blend_new_world_cache_samples_pipeline),153pipeline_cache.get_compute_pipeline(pipelines.presample_light_tiles_pipeline),154pipeline_cache.get_compute_pipeline(pipelines.di_initial_and_temporal_pipeline),155pipeline_cache.get_compute_pipeline(pipelines.di_spatial_and_shade_pipeline),156pipeline_cache.get_compute_pipeline(pipelines.gi_initial_and_temporal_pipeline),157pipeline_cache.get_compute_pipeline(pipelines.gi_spatial_and_shade_pipeline),158pipeline_cache.get_compute_pipeline(specular_gi_pipeline),159&scene_bindings.bind_group,160view_prepass_textures.deferred_view(),161view_prepass_textures.depth_view(),162view_prepass_textures.motion_vectors_view(),163view_prepass_textures.previous_deferred_view(),164view_prepass_textures.previous_depth_view(),165view_uniforms.uniforms.binding(),166previous_view_uniforms.uniforms.binding(),167)168else {169return;170};171172#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]173let Some(resolve_dlss_rr_textures_pipeline) =174pipeline_cache.get_compute_pipeline(pipelines.resolve_dlss_rr_textures_pipeline)175else {176return;177};178179let view_target_attachment = view_target.get_unsampled_color_attachment();180181let s = solari_lighting_resources;182let bind_group = render_device.create_bind_group(183"solari_lighting_bind_group",184&pipeline_cache.get_bind_group_layout(&pipelines.bind_group_layout),185&BindGroupEntries::sequential((186view_target_attachment.view,187s.light_tile_samples.as_entire_binding(),188s.light_tile_resolved_samples.as_entire_binding(),189&s.di_reservoirs_a,190&s.di_reservoirs_b,191s.gi_reservoirs_a.as_entire_binding(),192s.gi_reservoirs_b.as_entire_binding(),193gbuffer,194depth_buffer,195motion_vectors,196previous_gbuffer,197previous_depth_buffer,198view_uniforms_binding,199previous_view_uniforms_binding,200s.world_cache_checksums.as_entire_binding(),201s.world_cache_life.as_entire_binding(),202s.world_cache_radiance.as_entire_binding(),203s.world_cache_geometry_data.as_entire_binding(),204s.world_cache_luminance_deltas.as_entire_binding(),205s.world_cache_active_cells_new_radiance.as_entire_binding(),206s.world_cache_a.as_entire_binding(),207s.world_cache_b.as_entire_binding(),208s.world_cache_active_cell_indices.as_entire_binding(),209s.world_cache_active_cells_count.as_entire_binding(),210)),211);212let bind_group_world_cache_active_cells_dispatch = render_device.create_bind_group(213"solari_lighting_bind_group_world_cache_active_cells_dispatch",214&pipeline_cache215.get_bind_group_layout(&pipelines.bind_group_layout_world_cache_active_cells_dispatch),216&BindGroupEntries::single(s.world_cache_active_cells_dispatch.as_entire_binding()),217);218219#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]220let bind_group_resolve_dlss_rr_textures = view_dlss_rr_textures.map(|d| {221render_device.create_bind_group(222"solari_lighting_bind_group_resolve_dlss_rr_textures",223&pipeline_cache224.get_bind_group_layout(&pipelines.bind_group_layout_resolve_dlss_rr_textures),225&BindGroupEntries::sequential((226&d.diffuse_albedo.default_view,227&d.specular_albedo.default_view,228&d.normal_roughness.default_view,229&d.specular_motion_vectors.default_view,230)),231)232});233234// Choice of number here is arbitrary235let frame_index = frame_count.0.wrapping_mul(5782582);236237let diagnostics = ctx.diagnostic_recorder();238let diagnostics = diagnostics.as_deref();239240let command_encoder = ctx.command_encoder();241242// Clear the view target if we're the first node to write to it243if matches!(view_target_attachment.ops.load, LoadOp::Clear(_)) {244command_encoder.begin_render_pass(&RenderPassDescriptor {245label: Some("solari_lighting_clear"),246color_attachments: &[Some(view_target_attachment)],247depth_stencil_attachment: None,248timestamp_writes: None,249occlusion_query_set: None,250multiview_mask: None,251});252}253254let mut pass = command_encoder.begin_compute_pass(&ComputePassDescriptor {255label: Some("solari_lighting"),256timestamp_writes: None,257});258259let dx = solari_lighting_resources.view_size.x.div_ceil(8);260let dy = solari_lighting_resources.view_size.y.div_ceil(8);261262pass.set_bind_group(0, scene_bind_group, &[]);263pass.set_bind_group(2641,265&bind_group,266&[267view_uniform_offset.offset,268previous_view_uniform_offset.offset,269],270);271272#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]273if let Some(bind_group_resolve_dlss_rr_textures) = &bind_group_resolve_dlss_rr_textures {274pass.set_bind_group(2, bind_group_resolve_dlss_rr_textures, &[]);275pass.set_pipeline(resolve_dlss_rr_textures_pipeline);276pass.dispatch_workgroups(dx, dy, 1);277}278279let d = diagnostics.time_span(&mut pass, "solari_lighting/presample_light_tiles");280pass.set_pipeline(presample_light_tiles_pipeline);281pass.set_immediates(2820,283bytemuck::cast_slice(&[frame_index, solari_lighting.reset as u32]),284);285pass.dispatch_workgroups(LIGHT_TILE_BLOCKS as u32, 1, 1);286d.end(&mut pass);287288let d = diagnostics.time_span(&mut pass, "solari_lighting/world_cache");289290pass.set_bind_group(2, &bind_group_world_cache_active_cells_dispatch, &[]);291292pass.set_pipeline(decay_world_cache_pipeline);293pass.dispatch_workgroups((WORLD_CACHE_SIZE / 1024) as u32, 1, 1);294295pass.set_pipeline(compact_world_cache_single_block_pipeline);296pass.dispatch_workgroups((WORLD_CACHE_SIZE / 1024) as u32, 1, 1);297298pass.set_pipeline(compact_world_cache_blocks_pipeline);299pass.dispatch_workgroups(1, 1, 1);300301pass.set_pipeline(compact_world_cache_write_active_cells_pipeline);302pass.dispatch_workgroups((WORLD_CACHE_SIZE / 1024) as u32, 1, 1);303304pass.set_bind_group(2, None, &[]);305306pass.set_pipeline(sample_di_for_world_cache_pipeline);307pass.set_immediates(3080,309bytemuck::cast_slice(&[frame_index, solari_lighting.reset as u32]),310);311pass.dispatch_workgroups_indirect(312&solari_lighting_resources.world_cache_active_cells_dispatch,3130,314);315316pass.set_pipeline(sample_gi_for_world_cache_pipeline);317pass.set_immediates(3180,319bytemuck::cast_slice(&[frame_index, solari_lighting.reset as u32]),320);321pass.dispatch_workgroups_indirect(322&solari_lighting_resources.world_cache_active_cells_dispatch,3230,324);325326pass.set_pipeline(blend_new_world_cache_samples_pipeline);327pass.dispatch_workgroups_indirect(328&solari_lighting_resources.world_cache_active_cells_dispatch,3290,330);331332d.end(&mut pass);333334let d = diagnostics.time_span(&mut pass, "solari_lighting/direct_lighting");335336pass.set_pipeline(di_initial_and_temporal_pipeline);337pass.set_immediates(3380,339bytemuck::cast_slice(&[frame_index, solari_lighting.reset as u32]),340);341pass.dispatch_workgroups(dx, dy, 1);342343pass.set_pipeline(di_spatial_and_shade_pipeline);344pass.set_immediates(3450,346bytemuck::cast_slice(&[frame_index, solari_lighting.reset as u32]),347);348pass.dispatch_workgroups(dx, dy, 1);349350d.end(&mut pass);351352let d = diagnostics.time_span(&mut pass, "solari_lighting/diffuse_indirect_lighting");353354pass.set_pipeline(gi_initial_and_temporal_pipeline);355pass.set_immediates(3560,357bytemuck::cast_slice(&[frame_index, solari_lighting.reset as u32]),358);359pass.dispatch_workgroups(dx, dy, 1);360361pass.set_pipeline(gi_spatial_and_shade_pipeline);362pass.set_immediates(3630,364bytemuck::cast_slice(&[frame_index, solari_lighting.reset as u32]),365);366pass.dispatch_workgroups(dx, dy, 1);367368d.end(&mut pass);369370let d = diagnostics.time_span(&mut pass, "solari_lighting/specular_indirect_lighting");371#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]372if let Some(bind_group_resolve_dlss_rr_textures) = &bind_group_resolve_dlss_rr_textures {373pass.set_bind_group(2, bind_group_resolve_dlss_rr_textures, &[]);374}375pass.set_pipeline(specular_gi_pipeline);376pass.set_immediates(3770,378bytemuck::cast_slice(&[frame_index, solari_lighting.reset as u32]),379);380pass.dispatch_workgroups(dx, dy, 1);381d.end(&mut pass);382383drop(pass);384385diagnostics.record_u32(386ctx.command_encoder(),387&s.world_cache_active_cells_count.slice(..),388"solari_lighting/world_cache_active_cells_count",389);390}391392/// Initializes the Solari lighting pipelines at render startup.393pub fn init_solari_lighting_pipelines(394mut commands: Commands,395pipeline_cache: Res<PipelineCache>,396scene_bindings: Res<RaytracingSceneBindings>,397asset_server: Res<AssetServer>,398) {399let bind_group_layout = BindGroupLayoutDescriptor::new(400"solari_lighting_bind_group_layout",401&BindGroupLayoutEntries::sequential(402ShaderStages::COMPUTE,403(404texture_storage_2d(405ViewTarget::TEXTURE_FORMAT_HDR,406StorageTextureAccess::ReadWrite,407),408storage_buffer_sized(false, None),409storage_buffer_sized(false, None),410texture_storage_2d(TextureFormat::Rgba32Uint, StorageTextureAccess::ReadWrite),411texture_storage_2d(TextureFormat::Rgba32Uint, StorageTextureAccess::ReadWrite),412storage_buffer_sized(false, None),413storage_buffer_sized(false, None),414texture_2d(TextureSampleType::Uint),415texture_depth_2d(),416texture_2d(TextureSampleType::Float { filterable: true }),417texture_2d(TextureSampleType::Uint),418texture_depth_2d(),419uniform_buffer::<ViewUniform>(true),420uniform_buffer::<PreviousViewData>(true),421storage_buffer_sized(false, None),422storage_buffer_sized(false, None),423storage_buffer_sized(false, None),424storage_buffer_sized(false, None),425storage_buffer_sized(false, None),426storage_buffer_sized(false, None),427storage_buffer_sized(false, None),428storage_buffer_sized(false, None),429storage_buffer_sized(false, None),430storage_buffer_sized(false, None),431),432),433);434435let bind_group_layout_world_cache_active_cells_dispatch = BindGroupLayoutDescriptor::new(436"solari_lighting_bind_group_layout_world_cache_active_cells_dispatch",437&BindGroupLayoutEntries::single(ShaderStages::COMPUTE, storage_buffer_sized(false, None)),438);439440#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]441let bind_group_layout_resolve_dlss_rr_textures = BindGroupLayoutDescriptor::new(442"solari_lighting_bind_group_layout_resolve_dlss_rr_textures",443&BindGroupLayoutEntries::sequential(444ShaderStages::COMPUTE,445(446texture_storage_2d(TextureFormat::Rgba8Unorm, StorageTextureAccess::WriteOnly),447texture_storage_2d(TextureFormat::Rgba8Unorm, StorageTextureAccess::WriteOnly),448texture_storage_2d(TextureFormat::Rgba16Float, StorageTextureAccess::WriteOnly),449texture_storage_2d(TextureFormat::Rg16Float, StorageTextureAccess::WriteOnly),450),451),452);453454let create_pipeline = |label: &'static str,455entry_point: &'static str,456shader: Handle<Shader>,457extra_bind_group_layout: Option<&BindGroupLayoutDescriptor>,458extra_shader_defs: Vec<ShaderDefVal>| {459let mut layout = vec![460scene_bindings.bind_group_layout.clone(),461bind_group_layout.clone(),462];463if let Some(extra_bind_group_layout) = extra_bind_group_layout {464layout.push(extra_bind_group_layout.clone());465}466467let mut shader_defs = vec![ShaderDefVal::UInt(468"WORLD_CACHE_SIZE".into(),469WORLD_CACHE_SIZE as u32,470)];471shader_defs.extend_from_slice(&extra_shader_defs);472473pipeline_cache.queue_compute_pipeline(ComputePipelineDescriptor {474label: Some(label.into()),475layout,476immediate_size: 8,477shader,478shader_defs,479entry_point: Some(entry_point.into()),480..default()481})482};483484commands.insert_resource(SolariLightingPipelines {485bind_group_layout: bind_group_layout.clone(),486bind_group_layout_world_cache_active_cells_dispatch:487bind_group_layout_world_cache_active_cells_dispatch.clone(),488#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]489bind_group_layout_resolve_dlss_rr_textures: bind_group_layout_resolve_dlss_rr_textures490.clone(),491decay_world_cache_pipeline: create_pipeline(492"solari_lighting_decay_world_cache_pipeline",493"decay_world_cache",494load_embedded_asset!(asset_server.as_ref(), "world_cache_compact.wgsl"),495Some(&bind_group_layout_world_cache_active_cells_dispatch),496vec!["WORLD_CACHE_NON_ATOMIC_LIFE_BUFFER".into()],497),498compact_world_cache_single_block_pipeline: create_pipeline(499"solari_lighting_compact_world_cache_single_block_pipeline",500"compact_world_cache_single_block",501load_embedded_asset!(asset_server.as_ref(), "world_cache_compact.wgsl"),502Some(&bind_group_layout_world_cache_active_cells_dispatch),503vec!["WORLD_CACHE_NON_ATOMIC_LIFE_BUFFER".into()],504),505compact_world_cache_blocks_pipeline: create_pipeline(506"solari_lighting_compact_world_cache_blocks_pipeline",507"compact_world_cache_blocks",508load_embedded_asset!(asset_server.as_ref(), "world_cache_compact.wgsl"),509Some(&bind_group_layout_world_cache_active_cells_dispatch),510vec![],511),512compact_world_cache_write_active_cells_pipeline: create_pipeline(513"solari_lighting_compact_world_cache_write_active_cells_pipeline",514"compact_world_cache_write_active_cells",515load_embedded_asset!(asset_server.as_ref(), "world_cache_compact.wgsl"),516Some(&bind_group_layout_world_cache_active_cells_dispatch),517vec!["WORLD_CACHE_NON_ATOMIC_LIFE_BUFFER".into()],518),519sample_di_for_world_cache_pipeline: create_pipeline(520"solari_lighting_sample_di_for_world_cache_pipeline",521"sample_di",522load_embedded_asset!(asset_server.as_ref(), "world_cache_update.wgsl"),523None,524vec![],525),526sample_gi_for_world_cache_pipeline: create_pipeline(527"solari_lighting_sample_gi_for_world_cache_pipeline",528"sample_gi",529load_embedded_asset!(asset_server.as_ref(), "world_cache_update.wgsl"),530None,531vec!["WORLD_CACHE_QUERY_ATOMIC_MAX_LIFETIME".into()],532),533blend_new_world_cache_samples_pipeline: create_pipeline(534"solari_lighting_blend_new_world_cache_samples_pipeline",535"blend_new_samples",536load_embedded_asset!(asset_server.as_ref(), "world_cache_update.wgsl"),537None,538vec![],539),540presample_light_tiles_pipeline: create_pipeline(541"solari_lighting_presample_light_tiles_pipeline",542"presample_light_tiles",543load_embedded_asset!(asset_server.as_ref(), "presample_light_tiles.wgsl"),544None,545vec![],546),547di_initial_and_temporal_pipeline: create_pipeline(548"solari_lighting_di_initial_and_temporal_pipeline",549"initial_and_temporal",550load_embedded_asset!(asset_server.as_ref(), "restir_di.wgsl"),551None,552vec![],553),554di_spatial_and_shade_pipeline: create_pipeline(555"solari_lighting_di_spatial_and_shade_pipeline",556"spatial_and_shade",557load_embedded_asset!(asset_server.as_ref(), "restir_di.wgsl"),558None,559vec![],560),561gi_initial_and_temporal_pipeline: create_pipeline(562"solari_lighting_gi_initial_and_temporal_pipeline",563"initial_and_temporal",564load_embedded_asset!(asset_server.as_ref(), "restir_gi.wgsl"),565None,566vec!["WORLD_CACHE_FIRST_BOUNCE_LIGHT_LEAK_PREVENTION".into()],567),568gi_spatial_and_shade_pipeline: create_pipeline(569"solari_lighting_gi_spatial_and_shade_pipeline",570"spatial_and_shade",571load_embedded_asset!(asset_server.as_ref(), "restir_gi.wgsl"),572None,573vec![],574),575specular_gi_pipeline: create_pipeline(576"solari_lighting_specular_gi_pipeline",577"specular_gi",578load_embedded_asset!(asset_server.as_ref(), "specular_gi.wgsl"),579None,580vec![],581),582#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]583specular_gi_with_psr_pipeline: create_pipeline(584"solari_lighting_specular_gi_with_psr_pipeline",585"specular_gi",586load_embedded_asset!(asset_server.as_ref(), "specular_gi.wgsl"),587Some(&bind_group_layout_resolve_dlss_rr_textures),588vec!["DLSS_RR_GUIDE_BUFFERS".into()],589),590#[cfg(all(feature = "dlss", not(feature = "force_disable_dlss")))]591resolve_dlss_rr_textures_pipeline: create_pipeline(592"solari_lighting_resolve_dlss_rr_textures_pipeline",593"resolve_dlss_rr_textures",594load_embedded_asset!(asset_server.as_ref(), "resolve_dlss_rr_textures.wgsl"),595Some(&bind_group_layout_resolve_dlss_rr_textures),596vec!["DLSS_RR_GUIDE_BUFFERS".into()],597),598});599}600601602