Search across packages, versions, files, declarations, and comments. Use multiple terms to narrow results (AND), and add @vertex, @fragment, or @compute to filter by shader stage.

Constants

INITIAL_SAMPLES

#
const INITIAL_SAMPLES: u32 = 8u

SPATIAL_REUSE_RADIUS_PIXELS

#
const SPATIAL_REUSE_RADIUS_PIXELS: AbstractFloat = 30.0

CONFIDENCE_WEIGHT_CAP

#
const CONFIDENCE_WEIGHT_CAP: AbstractFloat = 20.0

Structures

NeighborInfo

#
struct NeighborInfo {
reservoir: Reservoir,
world_position: vec3<f32>,
world_normal: vec3<f32>,
diffuse_brdf: vec3<f32>,
}

Reservoir

#
struct Reservoir {
sample: LightSample,
confidence_weight: f32,
unbiased_contribution_weight: f32,
}

ReservoirMergeResult

#
struct ReservoirMergeResult {
merged_reservoir: Reservoir,
selected_sample_radiance: vec3<f32>,
wi: vec3<f32>,
selected_light_world_position: vec4<f32>,
}

ReservoirContribution

#
struct ReservoirContribution {
radiance: vec3<f32>,
target_function: f32,
wi: vec3<f32>,
}

Functions

initial_and_temporal

#
@compute
Runs custom parallel code on the GPU, not limited to graphics
@workgroup_size(8, 8, 1)
Defines the size of a thread group. One to three numbers: width (x), height (y), and depth (z). Missing values default to 1
fn initial_and_temporal (
@builtin(workgroup_id)
workgroup_id: vec3<u32>,
@builtin(global_invocation_id)
global_id: vec3<u32>
)

spatial_and_shade

#
@compute
Runs custom parallel code on the GPU, not limited to graphics
@workgroup_size(8, 8, 1)
Defines the size of a thread group. One to three numbers: width (x), height (y), and depth (z). Missing values default to 1
fn spatial_and_shade (
@builtin(global_invocation_id)
global_id: vec3<u32>
)

generate_initial_reservoir

#
fn generate_initial_reservoir (
world_position: vec3<f32>,
world_normal: vec3<f32>,
diffuse_brdf: vec3<f32>,
workgroup_id: vec2<u32>,
rng: ptr<function, u32>
) -> Reservoir

load_temporal_reservoir

#
fn load_temporal_reservoir (
pixel_id: vec2<u32>,
depth: f32,
world_position: vec3<f32>,
world_normal: vec3<f32>
) -> NeighborInfo

load_temporal_reservoir_inner

#
fn load_temporal_reservoir_inner (
temporal_pixel_id: vec2<u32>,
depth: f32,
world_position: vec3<f32>,
world_normal: vec3<f32>
) -> NeighborInfo

load_spatial_reservoir

#
fn load_spatial_reservoir (
pixel_id: vec2<u32>,
depth: f32,
world_position: vec3<f32>,
world_normal: vec3<f32>,
rng: ptr<function, u32>
) -> NeighborInfo

get_neighbor_pixel_id

#
fn get_neighbor_pixel_id (
center_pixel_id: vec2<u32>,
search_radius: f32,
rng: ptr<function, u32>
) -> vec2<u32>

empty_reservoir

#
fn empty_reservoir () -> Reservoir

reservoir_valid

#
fn reservoir_valid (
reservoir: Reservoir
) -> bool

pack_reservoir

#
fn pack_reservoir (
reservoir: Reservoir
) -> vec4<u32>

store_reservoir_a

#
fn store_reservoir_a (
pixel: vec2<u32>,
reservoir: Reservoir
)

store_reservoir_b

#
fn store_reservoir_b (
pixel: vec2<u32>,
reservoir: Reservoir
)

unpack_reservoir

#
fn unpack_reservoir (
packed: vec4<u32>
) -> Reservoir

load_reservoir_a

#
fn load_reservoir_a (
pixel: vec2<u32>
) -> Reservoir

load_reservoir_b

#
fn load_reservoir_b (
pixel: vec2<u32>
) -> Reservoir

merge_reservoirs

#
fn merge_reservoirs (
canonical_reservoir: Reservoir,
canonical_world_position: vec3<f32>,
canonical_world_normal: vec3<f32>,
canonical_diffuse_brdf: vec3<f32>,
other_reservoir: Reservoir,
other_world_position: vec3<f32>,
other_world_normal: vec3<f32>,
other_diffuse_brdf: vec3<f32>,
rng: ptr<function, u32>
) -> ReservoirMergeResult

resolved_reservoir_contribution

#
fn resolved_reservoir_contribution (
reservoir: Reservoir,
world_position: vec3<f32>,
world_normal: vec3<f32>,
diffuse_brdf: vec3<f32>
) -> ReservoirContribution
Contents