+ int highpixels_index; // which one is active - this toggles when doing blur
+ float *highpixels; // equals blurpixels[highpixels_index]
+ float *blurpixels[2];
+ unsigned char *u8pixels; // temporary processing buffer when outputting to rgba8 format
+ unsigned short *fp16pixels; // temporary processing buffer when outputting to rgba16f format
+ // describe the photons we intend to shoot for threaded dispatch
+ int numphotons; // number of photons to shoot this frame, always <= settings.maxphotons
+ r_shadow_bouncegrid_photon_t *photons; // describes the photons being shot this frame
+
+ // tasks
+ taskqueue_task_t cleartex_task; // clears the highpixels array
+ taskqueue_task_t assignphotons_task; // sets the photon counts on lights, etc
+ taskqueue_task_t enqueuephotons_task; // enqueues tasks to shoot the photons
+ taskqueue_task_t *photons_tasks; // [maxphotons] taskqueue entries to perform the photon shots
+ taskqueue_task_t photons_done_task; // checks that all photon shots are completed
+ taskqueue_task_t enqueue_slices_task; // enqueues slice tasks to render the light accumulation into the texture
+ taskqueue_task_t *slices_tasks; // [resolution[1]] taskqueue entries to perform the light path accumulation into the texture
+ taskqueue_task_t slices_done_task; // checks that light accumulation in the texture is done
+ taskqueue_task_t blurpixels_task; // blurs the highpixels array