[Bf-blender-cvs] [f7cc97e8cf5] split-kernel-faster-building: Cycles: Add shader_eval_state to allow eval of ray states besides RAY_ACTIVE

Mai Lavelle noreply at git.blender.org
Tue Nov 14 07:54:18 CET 2017


Commit: f7cc97e8cf57806505fced4e79fff7f2a883d43c
Author: Mai Lavelle
Date:   Tue Nov 14 01:26:53 2017 -0500
Branches: split-kernel-faster-building
https://developer.blender.org/rBf7cc97e8cf57806505fced4e79fff7f2a883d43c

Cycles: Add shader_eval_state to allow eval of ray states besides RAY_ACTIVE

===================================================================

M	intern/cycles/kernel/split/kernel_direct_lighting.h
M	intern/cycles/kernel/split/kernel_shader_eval.h
M	intern/cycles/kernel/split/kernel_shader_sort.h
M	intern/cycles/kernel/split/kernel_split_data_types.h

===================================================================

diff --git a/intern/cycles/kernel/split/kernel_direct_lighting.h b/intern/cycles/kernel/split/kernel_direct_lighting.h
index 4dea050c89f..57f92d9d822 100644
--- a/intern/cycles/kernel/split/kernel_direct_lighting.h
+++ b/intern/cycles/kernel/split/kernel_direct_lighting.h
@@ -123,6 +123,7 @@ ccl_device void kernel_direct_lighting(KernelGlobals *kg,
 
 	if(ccl_global_id(1) * ccl_global_size(0) + ccl_global_id(0) == 0) {
 		kernel_split_params.shader_eval_queue = QUEUE_SHADOW_RAY_CAST_DL_RAYS;
+		kernel_split_params.shader_eval_state = RAY_ACTIVE;
 	}
 #endif
 
diff --git a/intern/cycles/kernel/split/kernel_shader_eval.h b/intern/cycles/kernel/split/kernel_shader_eval.h
index e72c483c6ca..c95e625b840 100644
--- a/intern/cycles/kernel/split/kernel_shader_eval.h
+++ b/intern/cycles/kernel/split/kernel_shader_eval.h
@@ -24,6 +24,7 @@ ccl_device void kernel_shader_eval(KernelGlobals *kg)
 	int ray_index = ccl_global_id(1) * ccl_global_size(0) + ccl_global_id(0);
 
 	int queue = kernel_split_params.shader_eval_queue;
+	int shade_state = kernel_split_params.shader_eval_state;
 	int queue_index = kernel_split_params.queue_index[queue];
 
 	if(ray_index >= queue_index) {
@@ -39,7 +40,7 @@ ccl_device void kernel_shader_eval(KernelGlobals *kg)
 		return;
 	}
 
-	if(IS_STATE(kernel_split_state.ray_state, ray_index, RAY_ACTIVE)) {
+	if(IS_STATE(kernel_split_state.ray_state, ray_index, shade_state)) {
 		ShaderEvalTask *eval_task = &kernel_split_state.shader_eval_task[ray_index];
 		ShaderData *sd = (ShaderData*)(((ccl_global char*)&kernel_split_state) + eval_task->sd_offset);
 		ccl_global PathState *state = &kernel_split_state.path_state[ray_index];
diff --git a/intern/cycles/kernel/split/kernel_shader_sort.h b/intern/cycles/kernel/split/kernel_shader_sort.h
index 7e3e3ca92b4..2accd8f938b 100644
--- a/intern/cycles/kernel/split/kernel_shader_sort.h
+++ b/intern/cycles/kernel/split/kernel_shader_sort.h
@@ -25,12 +25,14 @@ ccl_device void kernel_shader_sort(KernelGlobals *kg,
 	/* Sorting on cuda split is not implemented */
 	if(tid == 0) {
 		kernel_split_params.shader_eval_queue = QUEUE_ACTIVE_AND_REGENERATED_RAYS;
+		kernel_split_params.shader_eval_state = RAY_ACTIVE;
 	}
 #else
 	uint qsize = kernel_split_params.queue_index[QUEUE_ACTIVE_AND_REGENERATED_RAYS];
 	if(tid == 0) {
 		kernel_split_params.queue_index[QUEUE_SHADER_SORTED_RAYS] = qsize;
 		kernel_split_params.shader_eval_queue = QUEUE_SHADER_SORTED_RAYS;
+		kernel_split_params.shader_eval_state = RAY_ACTIVE;
 	}
 
 	uint offset = (tid/SHADER_SORT_LOCAL_SIZE)*SHADER_SORT_BLOCK_SIZE;
diff --git a/intern/cycles/kernel/split/kernel_split_data_types.h b/intern/cycles/kernel/split/kernel_split_data_types.h
index 8698ae7e9d5..1589f929f22 100644
--- a/intern/cycles/kernel/split/kernel_split_data_types.h
+++ b/intern/cycles/kernel/split/kernel_split_data_types.h
@@ -33,6 +33,7 @@ typedef struct SplitParams {
 
 	/* queue for kernel_shader_eval */
 	QueueNumber shader_eval_queue;
+	char shader_eval_state;
 
 	/* Place for storing sd->flag. AMD GPU OpenCL compiler workaround */
 	int dummy_sd_flag;



More information about the Bf-blender-cvs mailing list