forked from bartvdbraak/blender
Cycles: Cleanup, wipe obviously outdated parts of split kernel comments
This commit is contained in:
parent
0c72008592
commit
76acaefdd7
@ -16,58 +16,27 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_background_buffer_update kernel.
|
||||
* This is the fourth kernel in the ray tracing logic, and the third
|
||||
* of the path iteration kernels. This kernel takes care of rays that hit
|
||||
* the background (sceneintersect kernel), and for the rays of
|
||||
* state RAY_UPDATE_BUFFER it updates the ray's accumulated radiance in
|
||||
* the output buffer. This kernel also takes care of rays that have been determined
|
||||
* to-be-regenerated.
|
||||
/* This kernel takes care of rays that hit the background (sceneintersect
|
||||
* kernel), and for the rays of state RAY_UPDATE_BUFFER it updates the ray's
|
||||
* accumulated radiance in the output buffer. This kernel also takes care of
|
||||
* rays that have been determined to-be-regenerated.
|
||||
*
|
||||
* We will empty QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue in this kernel
|
||||
* We will empty QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue in this kernel.
|
||||
*
|
||||
* Typically all rays that are in state RAY_HIT_BACKGROUND, RAY_UPDATE_BUFFER
|
||||
* will be eventually set to RAY_TO_REGENERATE state in this kernel. Finally all rays of ray_state
|
||||
* RAY_TO_REGENERATE will be regenerated and put in queue QUEUE_ACTIVE_AND_REGENERATED_RAYS.
|
||||
*
|
||||
* The input and output are as follows,
|
||||
*
|
||||
* rng_coop ---------------------------------------------|--- kernel_background_buffer_update --|--- PathRadiance_coop
|
||||
* throughput_coop --------------------------------------| |--- L_transparent_coop
|
||||
* per_sample_output_buffers ----------------------------| |--- per_sample_output_buffers
|
||||
* Ray_coop ---------------------------------------------| |--- ray_state
|
||||
* PathState_coop ---------------------------------------| |--- Queue_data (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* L_transparent_coop -----------------------------------| |--- Queue_data (QUEUE_ACTIVE_AND_REGENERATED_RAYS)
|
||||
* ray_state --------------------------------------------| |--- Queue_index (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* Queue_data (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS) ----| |--- Queue_index (QUEUE_ACTIVE_AND_REGENERATED_RAYS)
|
||||
* Queue_index (QUEUE_ACTIVE_AND_REGENERATED_RAYS) ------| |--- work_array
|
||||
* parallel_samples -------------------------------------| |--- PathState_coop
|
||||
* end_sample -------------------------------------------| |--- throughput_coop
|
||||
* kg (globals) -----------------------------------------| |--- rng_coop
|
||||
* rng_state --------------------------------------------| |--- Ray
|
||||
* PathRadiance_coop ------------------------------------| |
|
||||
* sw ---------------------------------------------------| |
|
||||
* sh ---------------------------------------------------| |
|
||||
* sx ---------------------------------------------------| |
|
||||
* sy ---------------------------------------------------| |
|
||||
* stride -----------------------------------------------| |
|
||||
* work_array -------------------------------------------| |--- work_array
|
||||
* queuesize --------------------------------------------| |
|
||||
* start_sample -----------------------------------------| |--- work_pool_wgs
|
||||
* work_pool_wgs ----------------------------------------| |
|
||||
* num_samples ------------------------------------------| |
|
||||
*
|
||||
* note on sd : sd argument is neither an input nor an output for this kernel. It is just filled and consumed here itself.
|
||||
* Note on Queues :
|
||||
* This kernel fetches rays from QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue.
|
||||
* will be eventually set to RAY_TO_REGENERATE state in this kernel.
|
||||
* Finally all rays of ray_state RAY_TO_REGENERATE will be regenerated and put
|
||||
* in queue QUEUE_ACTIVE_AND_REGENERATED_RAYS.
|
||||
*
|
||||
* State of queues when this kernel is called:
|
||||
* At entry,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE rays
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_UPDATE_BUFFER, RAY_HIT_BACKGROUND, RAY_TO_REGENERATE rays
|
||||
* - QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE rays.
|
||||
* - QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with
|
||||
* RAY_UPDATE_BUFFER, RAY_HIT_BACKGROUND, RAY_TO_REGENERATE rays.
|
||||
* At exit,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE and RAY_REGENERATED rays
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be empty
|
||||
* - QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE and
|
||||
* RAY_REGENERATED rays.
|
||||
* - QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be empty.
|
||||
*/
|
||||
ccl_device void kernel_buffer_update(KernelGlobals *kg)
|
||||
{
|
||||
@ -225,4 +194,3 @@ ccl_device void kernel_buffer_update(KernelGlobals *kg)
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@ -16,16 +16,16 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_data_initialization kernel
|
||||
* This kernel Initializes structures needed in path-iteration kernels.
|
||||
/* This kernel Initializes structures needed in path-iteration kernels.
|
||||
*
|
||||
* Note on Queues:
|
||||
* All slots in queues are initialized to queue empty slot;
|
||||
* The number of elements in the queues is initialized to 0;
|
||||
*/
|
||||
|
||||
/* distributes an amount of work across all threads
|
||||
* note: work done inside the loop may not show up to all threads till after the current kernel has completed
|
||||
/* Distributes an amount of work across all threads
|
||||
* note: work done inside the loop may not show up to all threads till after
|
||||
* the current kernel has completed
|
||||
*/
|
||||
#define parallel_for(kg, iter_name, work_size) \
|
||||
for(size_t _size = (work_size), \
|
||||
@ -151,4 +151,3 @@ void KERNEL_FUNCTION_FULL_NAME(data_init)(
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@ -16,36 +16,29 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_direct_lighting kernel.
|
||||
* This is the eighth kernel in the ray tracing logic. This is the seventh
|
||||
* of the path iteration kernels. This kernel takes care of direct lighting
|
||||
* logic. However, the "shadow ray cast" part of direct lighting is handled
|
||||
/* This kernel takes care of direct lighting logic.
|
||||
* However, the "shadow ray cast" part of direct lighting is handled
|
||||
* in the next kernel.
|
||||
*
|
||||
* This kernels determines the rays for which a shadow_blocked() function associated with direct lighting should be executed.
|
||||
* Those rays for which a shadow_blocked() function for direct-lighting must be executed, are marked with flag RAY_SHADOW_RAY_CAST_DL and
|
||||
* enqueued into the queue QUEUE_SHADOW_RAY_CAST_DL_RAYS
|
||||
*
|
||||
* The input and output are as follows,
|
||||
*
|
||||
* rng_coop -----------------------------------------|--- kernel_direct_lighting --|--- BSDFEval_coop
|
||||
* PathState_coop -----------------------------------| |--- ISLamp_coop
|
||||
* sd -----------------------------------------------| |--- LightRay_coop
|
||||
* ray_state ----------------------------------------| |--- ray_state
|
||||
* Queue_data (QUEUE_ACTIVE_AND_REGENERATED_RAYS) ---| |
|
||||
* kg (globals) -------------------------------------| |
|
||||
* queuesize ----------------------------------------| |
|
||||
* This kernels determines the rays for which a shadow_blocked() function
|
||||
* associated with direct lighting should be executed. Those rays for which
|
||||
* a shadow_blocked() function for direct-lighting must be executed, are
|
||||
* marked with flag RAY_SHADOW_RAY_CAST_DL and enqueued into the queue
|
||||
* QUEUE_SHADOW_RAY_CAST_DL_RAYS
|
||||
*
|
||||
* Note on Queues:
|
||||
* This kernel only reads from the QUEUE_ACTIVE_AND_REGENERATED_RAYS queue and processes
|
||||
* only the rays of state RAY_ACTIVE; If a ray needs to execute the corresponding shadow_blocked
|
||||
* part, after direct lighting, the ray is marked with RAY_SHADOW_RAY_CAST_DL flag.
|
||||
* This kernel only reads from the QUEUE_ACTIVE_AND_REGENERATED_RAYS queue
|
||||
* and processes only the rays of state RAY_ACTIVE; If a ray needs to execute
|
||||
* the corresponding shadow_blocked part, after direct lighting, the ray is
|
||||
* marked with RAY_SHADOW_RAY_CAST_DL flag.
|
||||
*
|
||||
* State of queues when this kernel is called:
|
||||
* state of queues QUEUE_ACTIVE_AND_REGENERATED_RAYS and QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be same
|
||||
* before and after this kernel call.
|
||||
* QUEUE_SHADOW_RAY_CAST_DL_RAYS queue will be filled with rays for which a shadow_blocked function must be executed, after this
|
||||
* kernel call. Before this kernel call the QUEUE_SHADOW_RAY_CAST_DL_RAYS will be empty.
|
||||
* - State of queues QUEUE_ACTIVE_AND_REGENERATED_RAYS and
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be same before and after this
|
||||
* kernel call.
|
||||
* - QUEUE_SHADOW_RAY_CAST_DL_RAYS queue will be filled with rays for which a
|
||||
* shadow_blocked function must be executed, after this kernel call
|
||||
* Before this kernel call the QUEUE_SHADOW_RAY_CAST_DL_RAYS will be empty.
|
||||
*/
|
||||
ccl_device void kernel_direct_lighting(KernelGlobals *kg)
|
||||
{
|
||||
|
@ -16,59 +16,41 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_holdout_emission_blurring_pathtermination_ao kernel.
|
||||
* This is the sixth kernel in the ray tracing logic. This is the fifth
|
||||
* of the path iteration kernels. This kernel takes care of the logic to process
|
||||
* "material of type holdout", indirect primitive emission, bsdf blurring,
|
||||
* probabilistic path termination and AO.
|
||||
/* This kernel takes care of the logic to process "material of type holdout",
|
||||
* indirect primitive emission, bsdf blurring, probabilistic path termination
|
||||
* and AO.
|
||||
*
|
||||
* This kernels determines the rays for which a shadow_blocked() function associated with AO should be executed.
|
||||
* Those rays for which a shadow_blocked() function for AO must be executed are marked with flag RAY_SHADOW_RAY_CAST_ao and
|
||||
* enqueued into the queue QUEUE_SHADOW_RAY_CAST_AO_RAYS
|
||||
* This kernels determines the rays for which a shadow_blocked() function
|
||||
* associated with AO should be executed. Those rays for which a
|
||||
* shadow_blocked() function for AO must be executed are marked with flag
|
||||
* RAY_SHADOW_RAY_CAST_ao and enqueued into the queue
|
||||
* QUEUE_SHADOW_RAY_CAST_AO_RAYS
|
||||
*
|
||||
* Ray state of rays that are terminated in this kernel are changed to RAY_UPDATE_BUFFER
|
||||
*
|
||||
* The input and output are as follows,
|
||||
*
|
||||
* rng_coop ---------------------------------------------|--- kernel_holdout_emission_blurring_pathtermination_ao ---|--- Queue_index (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* throughput_coop --------------------------------------| |--- PathState_coop
|
||||
* PathRadiance_coop ------------------------------------| |--- throughput_coop
|
||||
* Intersection_coop ------------------------------------| |--- L_transparent_coop
|
||||
* PathState_coop ---------------------------------------| |--- per_sample_output_buffers
|
||||
* L_transparent_coop -----------------------------------| |--- PathRadiance_coop
|
||||
* sd ---------------------------------------------------| |--- ShaderData
|
||||
* ray_state --------------------------------------------| |--- ray_state
|
||||
* Queue_data (QUEUE_ACTIVE_AND_REGENERATED_RAYS) -------| |--- Queue_data (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* Queue_index (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS) ---| |--- AOAlpha_coop
|
||||
* kg (globals) -----------------------------------------| |--- AOBSDF_coop
|
||||
* parallel_samples -------------------------------------| |--- AOLightRay_coop
|
||||
* per_sample_output_buffers ----------------------------| |
|
||||
* sw ---------------------------------------------------| |
|
||||
* sh ---------------------------------------------------| |
|
||||
* sx ---------------------------------------------------| |
|
||||
* sy ---------------------------------------------------| |
|
||||
* stride -----------------------------------------------| |
|
||||
* work_array -------------------------------------------| |
|
||||
* queuesize --------------------------------------------| |
|
||||
* start_sample -----------------------------------------| |
|
||||
*
|
||||
* Note on Queues:
|
||||
* This kernel fetches rays from the queue QUEUE_ACTIVE_AND_REGENERATED_RAYS and processes only
|
||||
* the rays of state RAY_ACTIVE.
|
||||
* There are different points in this kernel where a ray may terminate and reach RAY_UPDATE_BUFFER
|
||||
* state. These rays are enqueued into QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue. These rays will
|
||||
* still be present in QUEUE_ACTIVE_AND_REGENERATED_RAYS queue, but since their ray-state has been
|
||||
* changed to RAY_UPDATE_BUFFER, there is no problem.
|
||||
* This kernel fetches rays from the queue QUEUE_ACTIVE_AND_REGENERATED_RAYS
|
||||
* and processes only the rays of state RAY_ACTIVE.
|
||||
* There are different points in this kernel where a ray may terminate and
|
||||
* reach RAY_UPDATE_BUFFER state. These rays are enqueued into
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue. These rays will still be present
|
||||
* in QUEUE_ACTIVE_AND_REGENERATED_RAYS queue, but since their ray-state has
|
||||
* been changed to RAY_UPDATE_BUFFER, there is no problem.
|
||||
*
|
||||
* State of queues when this kernel is called:
|
||||
* At entry,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE and RAY_REGENERATED rays
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_TO_REGENERATE rays.
|
||||
* QUEUE_SHADOW_RAY_CAST_AO_RAYS will be empty.
|
||||
* - QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE and
|
||||
* RAY_REGENERATED rays
|
||||
* - QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with
|
||||
* RAY_TO_REGENERATE rays.
|
||||
* - QUEUE_SHADOW_RAY_CAST_AO_RAYS will be empty.
|
||||
* At exit,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE, RAY_REGENERATED and RAY_UPDATE_BUFFER rays
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_TO_REGENERATE and RAY_UPDATE_BUFFER rays
|
||||
* QUEUE_SHADOW_RAY_CAST_AO_RAYS will be filled with rays marked with flag RAY_SHADOW_RAY_CAST_AO
|
||||
* - QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE,
|
||||
* RAY_REGENERATED and RAY_UPDATE_BUFFER rays.
|
||||
* - QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with
|
||||
* RAY_TO_REGENERATE and RAY_UPDATE_BUFFER rays.
|
||||
* - QUEUE_SHADOW_RAY_CAST_AO_RAYS will be filled with rays marked with
|
||||
* flag RAY_SHADOW_RAY_CAST_AO
|
||||
*/
|
||||
ccl_device void kernel_holdout_emission_blurring_pathtermination_ao(KernelGlobals *kg)
|
||||
{
|
||||
@ -288,4 +270,3 @@ ccl_device void kernel_holdout_emission_blurring_pathtermination_ao(KernelGlobal
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@ -16,25 +16,9 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_lamp_emission
|
||||
* This is the 3rd kernel in the ray-tracing logic. This is the second of the
|
||||
* path-iteration kernels. This kernel takes care of the indirect lamp emission logic.
|
||||
* This kernel operates on QUEUE_ACTIVE_AND_REGENERATED_RAYS. It processes rays of state RAY_ACTIVE
|
||||
* and RAY_HIT_BACKGROUND.
|
||||
/* This kernel operates on QUEUE_ACTIVE_AND_REGENERATED_RAYS.
|
||||
* It processes rays of state RAY_ACTIVE and RAY_HIT_BACKGROUND.
|
||||
* We will empty QUEUE_ACTIVE_AND_REGENERATED_RAYS queue in this kernel.
|
||||
* The input/output of the kernel is as follows,
|
||||
* Throughput_coop ------------------------------------|--- kernel_lamp_emission --|--- PathRadiance_coop
|
||||
* Ray_coop -------------------------------------------| |--- Queue_data(QUEUE_ACTIVE_AND_REGENERATED_RAYS)
|
||||
* PathState_coop -------------------------------------| |--- Queue_index(QUEUE_ACTIVE_AND_REGENERATED_RAYS)
|
||||
* kg (globals) ---------------------------------------| |
|
||||
* Intersection_coop ----------------------------------| |
|
||||
* ray_state ------------------------------------------| |
|
||||
* Queue_data (QUEUE_ACTIVE_AND_REGENERATED_RAYS) -----| |
|
||||
* Queue_index (QUEUE_ACTIVE_AND_REGENERATED_RAYS) ----| |
|
||||
* queuesize ------------------------------------------| |
|
||||
* use_queues_flag ------------------------------------| |
|
||||
* sw -------------------------------------------------| |
|
||||
* sh -------------------------------------------------| |
|
||||
*/
|
||||
ccl_device void kernel_lamp_emission(KernelGlobals *kg)
|
||||
{
|
||||
|
@ -16,48 +16,33 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_setup_next_iteration kernel.
|
||||
* This is the tenth kernel in the ray tracing logic. This is the ninth
|
||||
* of the path iteration kernels. This kernel takes care of setting up
|
||||
* Ray for the next iteration of path-iteration and accumulating radiance
|
||||
* corresponding to AO and direct-lighting
|
||||
/*This kernel takes care of setting up ray for the next iteration of
|
||||
* path-iteration and accumulating radiance corresponding to AO and
|
||||
* direct-lighting
|
||||
*
|
||||
* Ray state of rays that are terminated in this kernel are changed to RAY_UPDATE_BUFFER
|
||||
* Ray state of rays that are terminated in this kernel are changed
|
||||
* to RAY_UPDATE_BUFFER.
|
||||
*
|
||||
* The input and output are as follows,
|
||||
*
|
||||
* rng_coop ---------------------------------------------|--- kernel_next_iteration_setup -|--- Queue_index (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* throughput_coop --------------------------------------| |--- Queue_data (QUEUE_HITBF_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* PathRadiance_coop ------------------------------------| |--- throughput_coop
|
||||
* PathState_coop ---------------------------------------| |--- PathRadiance_coop
|
||||
* sd ---------------------------------------------------| |--- PathState_coop
|
||||
* ray_state --------------------------------------------| |--- ray_state
|
||||
* Queue_data (QUEUE_ACTIVE_AND_REGENERATD_RAYS) --------| |--- Ray_coop
|
||||
* Queue_index (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS) ---| |--- use_queues_flag
|
||||
* Ray_coop ---------------------------------------------| |
|
||||
* kg (globals) -----------------------------------------| |
|
||||
* LightRay_dl_coop -------------------------------------|
|
||||
* ISLamp_coop ------------------------------------------|
|
||||
* BSDFEval_coop ----------------------------------------|
|
||||
* LightRay_ao_coop -------------------------------------|
|
||||
* AOBSDF_coop ------------------------------------------|
|
||||
* AOAlpha_coop -----------------------------------------|
|
||||
*
|
||||
* Note on queues,
|
||||
* This kernel fetches rays from the queue QUEUE_ACTIVE_AND_REGENERATED_RAYS and processes only
|
||||
* the rays of state RAY_ACTIVE.
|
||||
* There are different points in this kernel where a ray may terminate and reach RAY_UPDATE_BUFF
|
||||
* state. These rays are enqueued into QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue. These rays will
|
||||
* still be present in QUEUE_ACTIVE_AND_REGENERATED_RAYS queue, but since their ray-state has been
|
||||
* changed to RAY_UPDATE_BUFF, there is no problem.
|
||||
* Note on queues:
|
||||
* This kernel fetches rays from the queue QUEUE_ACTIVE_AND_REGENERATED_RAYS
|
||||
* and processes only the rays of state RAY_ACTIVE.
|
||||
* There are different points in this kernel where a ray may terminate and
|
||||
* reach RAY_UPDATE_BUFF state. These rays are enqueued into
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue. These rays will still be present
|
||||
* in QUEUE_ACTIVE_AND_REGENERATED_RAYS queue, but since their ray-state has
|
||||
* been changed to RAY_UPDATE_BUFF, there is no problem.
|
||||
*
|
||||
* State of queues when this kernel is called:
|
||||
* At entry,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE, RAY_REGENERATED, RAY_UPDATE_BUFFER rays.
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_TO_REGENERATE and RAY_UPDATE_BUFFER rays
|
||||
* - QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE,
|
||||
* RAY_REGENERATED, RAY_UPDATE_BUFFER rays.
|
||||
* - QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with
|
||||
* RAY_TO_REGENERATE and RAY_UPDATE_BUFFER rays.
|
||||
* At exit,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE, RAY_REGENERATED and more RAY_UPDATE_BUFFER rays.
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_TO_REGENERATE and more RAY_UPDATE_BUFFER rays
|
||||
* - QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE,
|
||||
* RAY_REGENERATED and more RAY_UPDATE_BUFFER rays.
|
||||
* - QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with
|
||||
* RAY_TO_REGENERATE and more RAY_UPDATE_BUFFER rays.
|
||||
*/
|
||||
ccl_device void kernel_next_iteration_setup(KernelGlobals *kg)
|
||||
{
|
||||
@ -182,4 +167,3 @@ ccl_device void kernel_next_iteration_setup(KernelGlobals *kg)
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@ -21,7 +21,6 @@ CCL_NAMESPACE_BEGIN
|
||||
*
|
||||
* Ray state of rays outside the tile-boundary will be marked RAY_INACTIVE
|
||||
*/
|
||||
|
||||
ccl_device void kernel_path_init(KernelGlobals *kg) {
|
||||
int ray_index = ccl_global_id(0) + ccl_global_id(1) * ccl_global_size(0);
|
||||
|
||||
@ -101,4 +100,3 @@ ccl_device void kernel_path_init(KernelGlobals *kg) {
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@ -16,36 +16,24 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/*
|
||||
* The kernel "kernel_queue_enqueue" enqueues rays of
|
||||
* different ray state into their appropriate Queues;
|
||||
/* This kernel enqueues rays of different ray state into their
|
||||
* appropriate queues:
|
||||
*
|
||||
* 1. Rays that have been determined to hit the background from the
|
||||
* "kernel_scene_intersect" kernel
|
||||
* are enqueued in QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS;
|
||||
* 2. Rays that have been determined to be actively participating in path-iteration will be enqueued into QUEUE_ACTIVE_AND_REGENERATED_RAYS.
|
||||
*
|
||||
* The input and output of the kernel is as follows,
|
||||
*
|
||||
* ray_state -------------------------------------------|--- kernel_queue_enqueue --|--- Queue_data (QUEUE_ACTIVE_AND_REGENERATED_RAYS & QUEUE_HITBF_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* Queue_index(QUEUE_ACTIVE_AND_REGENERATED_RAYS) ------| |--- Queue_index (QUEUE_ACTIVE_AND_REGENERATED_RAYS & QUEUE_HITBF_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* Queue_index(QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS) ---| |
|
||||
* queuesize -------------------------------------------| |
|
||||
*
|
||||
* Note on Queues :
|
||||
* State of queues during the first time this kernel is called :
|
||||
* At entry,
|
||||
* Both QUEUE_ACTIVE_AND_REGENERATED_RAYS and QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be empty.
|
||||
* At exit,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE rays
|
||||
* QUEUE_HITBF_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_HIT_BACKGROUND rays.
|
||||
* "kernel_scene_intersect" kernel are enqueued in
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS;
|
||||
* 2. Rays that have been determined to be actively participating in pat
|
||||
* -iteration will be enqueued into QUEUE_ACTIVE_AND_REGENERATED_RAYS.
|
||||
*
|
||||
* State of queue during other times this kernel is called:
|
||||
* At entry,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be empty.
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will contain RAY_TO_REGENERATE and RAY_UPDATE_BUFFER rays.
|
||||
* - QUEUE_ACTIVE_AND_REGENERATED_RAYS will be empty.
|
||||
* - QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will contain RAY_TO_REGENERATE
|
||||
* and RAY_UPDATE_BUFFER rays.
|
||||
* At exit,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE rays.
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_TO_REGENERATE, RAY_UPDATE_BUFFER, RAY_HIT_BACKGROUND rays.
|
||||
* - QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE rays.
|
||||
* - QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with
|
||||
* RAY_TO_REGENERATE, RAY_UPDATE_BUFFER, RAY_HIT_BACKGROUND rays.
|
||||
*/
|
||||
ccl_device void kernel_queue_enqueue(KernelGlobals *kg)
|
||||
{
|
||||
@ -101,4 +89,3 @@ ccl_device void kernel_queue_enqueue(KernelGlobals *kg)
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@ -16,51 +16,13 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_scene_intersect kernel.
|
||||
* This is the second kernel in the ray tracing logic. This is the first
|
||||
* of the path iteration kernels. This kernel takes care of scene_intersect function.
|
||||
/* This kernel takes care of scene_intersect function.
|
||||
*
|
||||
* This kernel changes the ray_state of RAY_REGENERATED rays to RAY_ACTIVE.
|
||||
* This kernel processes rays of ray state RAY_ACTIVE
|
||||
* This kernel determines the rays that have hit the background and changes their ray state to RAY_HIT_BACKGROUND.
|
||||
*
|
||||
* The input and output are as follows,
|
||||
*
|
||||
* Ray_coop ---------------------------------------|--------- kernel_scene_intersect----------|--- PathState
|
||||
* PathState_coop ---------------------------------| |--- Intersection
|
||||
* ray_state --------------------------------------| |--- ray_state
|
||||
* use_queues_flag --------------------------------| |
|
||||
* QueueData(QUEUE_ACTIVE_AND_REGENERATED_RAYS) ---| |
|
||||
* kg (globals) -----------------------------------| |
|
||||
* rng_coop ---------------------------------------| |
|
||||
* sw ---------------------------------------------| |
|
||||
* sh ---------------------------------------------| |
|
||||
* queuesize --------------------------------------| |
|
||||
*
|
||||
* Note on Queues :
|
||||
* Ideally we would want kernel_scene_intersect to work on queues.
|
||||
* But during the very first time, the queues will be empty and hence we perform a direct mapping
|
||||
* between ray-index and thread-index; From the next time onward, the queue will be filled and
|
||||
* we may start operating on queues.
|
||||
*
|
||||
* State of queue during the first time this kernel is called :
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS and QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be empty.before and after this kernel
|
||||
*
|
||||
* State of queues during other times this kernel is called :
|
||||
* At entry,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will have a mix of RAY_ACTIVE, RAY_UPDATE_BUFFER and RAY_REGENERATED rays;
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_TO_REGENERATE and RAY_UPDATE_BUFFER rays ;
|
||||
* (The rays that are in the state RAY_UPDATE_BUFFER in both the queues are actually the same rays; These
|
||||
* are the rays that were in RAY_ACTIVE state during the initial enqueue but on further processing
|
||||
* , by different kernels, have turned into RAY_UPDATE_BUFFER rays. Since all kernel, even after fetching from
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS, proceed further based on ray state information, RAY_UPDATE_BUFFER rays
|
||||
* being present in QUEUE_ACTIVE_AND_REGENERATED_RAYS does not cause any logical issues)
|
||||
* At exit,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS - All RAY_REGENERATED rays will have been converted to RAY_ACTIVE and
|
||||
* Some rays in QUEUE_ACTIVE_AND_REGENERATED_RAYS queue will move to state RAY_HIT_BACKGROUND
|
||||
* QUEUE_HITBF_BUFF_UPDATE_TOREGEN_RAYS - no change
|
||||
* This kernel determines the rays that have hit the background and changes
|
||||
* their ray state to RAY_HIT_BACKGROUND.
|
||||
*/
|
||||
|
||||
ccl_device void kernel_scene_intersect(KernelGlobals *kg)
|
||||
{
|
||||
/* Fetch use_queues_flag */
|
||||
@ -146,4 +108,3 @@ ccl_device void kernel_scene_intersect(KernelGlobals *kg)
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@ -16,35 +16,12 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_shader_eval kernel
|
||||
* This kernel is the 5th kernel in the ray tracing logic. This is
|
||||
* the 4rd kernel in path iteration. This kernel sets up the ShaderData
|
||||
* structure from the values computed by the previous kernels. It also identifies
|
||||
* the rays of state RAY_TO_REGENERATE and enqueues them in QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue.
|
||||
/* This kernel sets up the ShaderData structure from the values computed
|
||||
* by the previous kernels.
|
||||
*
|
||||
* The input and output of the kernel is as follows,
|
||||
* rng_coop -------------------------------------------|--- kernel_shader_eval --|--- sd
|
||||
* Ray_coop -------------------------------------------| |--- Queue_data (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* PathState_coop -------------------------------------| |--- Queue_index (QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS)
|
||||
* Intersection_coop ----------------------------------| |
|
||||
* Queue_data (QUEUE_ACTIVE_AND_REGENERATD_RAYS)-------| |
|
||||
* Queue_index(QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS)---| |
|
||||
* ray_state ------------------------------------------| |
|
||||
* kg (globals) ---------------------------------------| |
|
||||
* queuesize ------------------------------------------| |
|
||||
*
|
||||
* Note on Queues :
|
||||
* This kernel reads from the QUEUE_ACTIVE_AND_REGENERATED_RAYS queue and processes
|
||||
* only the rays of state RAY_ACTIVE;
|
||||
* State of queues when this kernel is called,
|
||||
* at entry,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE and RAY_REGENERATED rays
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be empty.
|
||||
* at exit,
|
||||
* QUEUE_ACTIVE_AND_REGENERATED_RAYS will be filled with RAY_ACTIVE and RAY_REGENERATED rays
|
||||
* QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be filled with RAY_TO_REGENERATE rays
|
||||
* It also identifies the rays of state RAY_TO_REGENERATE and enqueues them
|
||||
* in QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue.
|
||||
*/
|
||||
|
||||
ccl_device void kernel_shader_eval(KernelGlobals *kg)
|
||||
{
|
||||
/* Enqeueue RAY_TO_REGENERATE rays into QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS queue. */
|
||||
@ -91,4 +68,3 @@ ccl_device void kernel_shader_eval(KernelGlobals *kg)
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@ -16,33 +16,7 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_shadow_blocked kernel.
|
||||
* This is the ninth kernel in the ray tracing logic. This is the eighth
|
||||
* of the path iteration kernels. This kernel takes care of "shadow ray cast"
|
||||
* logic of the direct lighting and AO part of ray tracing.
|
||||
*
|
||||
* The input and output are as follows,
|
||||
*
|
||||
* PathState_coop ----------------------------------|--- kernel_shadow_blocked --|
|
||||
* LightRay_dl_coop --------------------------------| |--- LightRay_dl_coop
|
||||
* LightRay_ao_coop --------------------------------| |--- LightRay_ao_coop
|
||||
* ray_state ---------------------------------------| |--- ray_state
|
||||
* Queue_data(QUEUE_SHADOW_RAY_CAST_AO_RAYS & | |--- Queue_data (QUEUE_SHADOW_RAY_CAST_AO_RAYS & QUEUE_SHADOW_RAY_CAST_AO_RAYS)
|
||||
QUEUE_SHADOW_RAY_CAST_DL_RAYS) -------| |
|
||||
* Queue_index(QUEUE_SHADOW_RAY_CAST_AO_RAYS&
|
||||
QUEUE_SHADOW_RAY_CAST_DL_RAYS) -------| |
|
||||
* kg (globals) ------------------------------------| |
|
||||
* queuesize ---------------------------------------| |
|
||||
*
|
||||
* Note on sd_shadow : sd_shadow is neither input nor output to this kernel. sd_shadow is filled and consumed in this kernel itself.
|
||||
* Note on queues :
|
||||
* The kernel fetches from QUEUE_SHADOW_RAY_CAST_AO_RAYS queue. We will empty this queues in this kernel.
|
||||
* State of queues when this kernel is called :
|
||||
* state of queues QUEUE_ACTIVE_AND_REGENERATED_RAYS and QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be same
|
||||
* before and after this kernel call.
|
||||
* QUEUE_SHADOW_RAY_CAST_AO_RAYS will be filled with rays marked with flags RAY_SHADOW_RAY_CAST_AO during kernel entry.
|
||||
* QUEUE_SHADOW_RAY_CAST_AO_RAYS will be empty at kernel exit.
|
||||
*/
|
||||
/* Shadow ray cast for AO. */
|
||||
ccl_device void kernel_shadow_blocked_ao(KernelGlobals *kg)
|
||||
{
|
||||
int lidx = ccl_local_id(1) * ccl_local_id(0) + ccl_local_id(0);
|
||||
|
@ -16,33 +16,7 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Note on kernel_shadow_blocked kernel.
|
||||
* This is the ninth kernel in the ray tracing logic. This is the eighth
|
||||
* of the path iteration kernels. This kernel takes care of "shadow ray cast"
|
||||
* logic of the direct lighting and AO part of ray tracing.
|
||||
*
|
||||
* The input and output are as follows,
|
||||
*
|
||||
* PathState_coop ----------------------------------|--- kernel_shadow_blocked --|
|
||||
* LightRay_dl_coop --------------------------------| |--- LightRay_dl_coop
|
||||
* LightRay_ao_coop --------------------------------| |--- LightRay_ao_coop
|
||||
* ray_state ---------------------------------------| |--- ray_state
|
||||
* Queue_data(QUEUE_SHADOW_RAY_CAST_AO_RAYS & | |--- Queue_data (QUEUE_SHADOW_RAY_CAST_AO_RAYS & QUEUE_SHADOW_RAY_CAST_AO_RAYS)
|
||||
QUEUE_SHADOW_RAY_CAST_DL_RAYS) -------| |
|
||||
* Queue_index(QUEUE_SHADOW_RAY_CAST_AO_RAYS&
|
||||
QUEUE_SHADOW_RAY_CAST_DL_RAYS) -------| |
|
||||
* kg (globals) ------------------------------------| |
|
||||
* queuesize ---------------------------------------| |
|
||||
*
|
||||
* Note on sd_shadow : sd_shadow is neither input nor output to this kernel. sd_shadow is filled and consumed in this kernel itself.
|
||||
* Note on queues :
|
||||
* The kernel fetches from QUEUE_SHADOW_RAY_CAST_DL_RAYS queue. We will empty this queue in this kernel.
|
||||
* State of queues when this kernel is called :
|
||||
* state of queues QUEUE_ACTIVE_AND_REGENERATED_RAYS and QUEUE_HITBG_BUFF_UPDATE_TOREGEN_RAYS will be same
|
||||
* before and after this kernel call.
|
||||
* QUEUE_SHADOW_RAY_CAST_DL_RAYS will be filled with rays marked with flags RAY_SHADOW_RAY_CAST_DL, during kernel entry.
|
||||
* QUEUE_SHADOW_RAY_CAST_DL_RAYS will be empty at kernel exit.
|
||||
*/
|
||||
/* Shadow ray cast for direct visible light. */
|
||||
ccl_device void kernel_shadow_blocked_dl(KernelGlobals *kg)
|
||||
{
|
||||
int lidx = ccl_local_id(1) * ccl_local_id(0) + ccl_local_id(0);
|
||||
@ -88,4 +62,3 @@ ccl_device void kernel_shadow_blocked_dl(KernelGlobals *kg)
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user