Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_solari/src/realtime/resolve_dlss_rr_textures.wgsl
6596 views
#import bevy_pbr::pbr_deferred_types::unpack_24bit_normal
#import bevy_pbr::utils::octahedral_decode
#import bevy_render::view::View

@group(1) @binding(7) var gbuffer: texture_2d<u32>;
@group(1) @binding(12) var<uniform> view: View;

@group(2) @binding(0) var diffuse_albedo: texture_storage_2d<rgba8unorm, write>;
@group(2) @binding(1) var specular_albedo: texture_storage_2d<rgba8unorm, write>;
@group(2) @binding(2) var normal_roughness: texture_storage_2d<rgba16float, write>;
@group(2) @binding(3) var specular_motion_vectors: texture_storage_2d<rg16float, write>;

@compute @workgroup_size(8, 8, 1)
fn resolve_dlss_rr_textures(@builtin(global_invocation_id) global_id: vec3<u32>) {
    let pixel_id = global_id.xy;
    if any(pixel_id >= vec2u(view.main_pass_viewport.zw)) { return; }

    let gpixel = textureLoad(gbuffer, pixel_id, 0);
    let base_rough = unpack4x8unorm(gpixel.r);
    let base_color = pow(base_rough.rgb, vec3(2.2));
    let world_normal = octahedral_decode(unpack_24bit_normal(gpixel.a));
    let perceptual_roughness = base_rough.a;

    textureStore(diffuse_albedo, pixel_id, vec4(base_color, 0.0));
    textureStore(specular_albedo, pixel_id, vec4(0.0)); // TODO
    textureStore(normal_roughness, pixel_id, vec4(world_normal, perceptual_roughness));
    textureStore(specular_motion_vectors, pixel_id, vec4(0.0)); // TODO
}