Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-12-31 19:18:13 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-12-31 19:18:13 +0400
commitb5595298d36a5023cc33ed41463fd6c032f2ec7b (patch)
treee3a404393ff4a8e39a991f9a3d8ca78c0d3033a7 /intern/cycles/kernel
parent1b4487e813edac9c5b57b6d5c6175c46c4a54b1c (diff)
Cycles code refactoring: change displace kernel into more generic shader
evaluate kernel, added background shader evaluate.
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r--intern/cycles/kernel/kernel.cl4
-rw-r--r--intern/cycles/kernel/kernel.cpp6
-rw-r--r--intern/cycles/kernel/kernel.cu4
-rw-r--r--intern/cycles/kernel/kernel.h6
-rw-r--r--intern/cycles/kernel/kernel_displace.h48
-rw-r--r--intern/cycles/kernel/kernel_optimized.cpp6
-rw-r--r--intern/cycles/kernel/kernel_types.h7
7 files changed, 62 insertions, 19 deletions
diff --git a/intern/cycles/kernel/kernel.cl b/intern/cycles/kernel/kernel.cl
index 90eb7a2513f..479cf9b2e64 100644
--- a/intern/cycles/kernel/kernel.cl
+++ b/intern/cycles/kernel/kernel.cl
@@ -80,10 +80,10 @@ __kernel void kernel_ocl_tonemap(
kernel_film_tonemap(kg, rgba, buffer, sample, resolution, x, y, offset, stride);
}
-/*__kernel void kernel_ocl_displace(__global uint4 *input, __global float3 *offset, int sx)
+/*__kernel void kernel_ocl_shader(__global uint4 *input, __global float3 *output, int type, int sx)
{
int x = sx + get_global_id(0);
- kernel_displace(input, offset, x);
+ kernel_shader_evaluate(input, output, (ShaderEvalType)type, x);
}*/
diff --git a/intern/cycles/kernel/kernel.cpp b/intern/cycles/kernel/kernel.cpp
index b4c3839dbd0..e66ddd86cd6 100644
--- a/intern/cycles/kernel/kernel.cpp
+++ b/intern/cycles/kernel/kernel.cpp
@@ -216,11 +216,11 @@ void kernel_cpu_tonemap(KernelGlobals *kg, uchar4 *rgba, float4 *buffer, int sam
kernel_film_tonemap(kg, rgba, buffer, sample, resolution, x, y, offset, stride);
}
-/* Displacement */
+/* Shader Evaluation */
-void kernel_cpu_displace(KernelGlobals *kg, uint4 *input, float3 *offset, int i)
+void kernel_cpu_shader(KernelGlobals *kg, uint4 *input, float3 *output, int type, int i)
{
- kernel_displace(kg, input, offset, i);
+ kernel_shader_evaluate(kg, input, output, (ShaderEvalType)type, i);
}
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/kernel.cu b/intern/cycles/kernel/kernel.cu
index 71fc7ac3197..c97aeb67548 100644
--- a/intern/cycles/kernel/kernel.cu
+++ b/intern/cycles/kernel/kernel.cu
@@ -44,10 +44,10 @@ extern "C" __global__ void kernel_cuda_tonemap(uchar4 *rgba, float4 *buffer, int
kernel_film_tonemap(NULL, rgba, buffer, sample, resolution, x, y, offset, stride);
}
-extern "C" __global__ void kernel_cuda_displace(uint4 *input, float3 *offset, int sx)
+extern "C" __global__ void kernel_cuda_shader(uint4 *input, float3 *output, int type, int sx)
{
int x = sx + blockDim.x*blockIdx.x + threadIdx.x;
- kernel_displace(NULL, input, offset, x);
+ kernel_shader_evaluate(NULL, input, output, (ShaderEvalType)type, x);
}
diff --git a/intern/cycles/kernel/kernel.h b/intern/cycles/kernel/kernel.h
index 78247504b39..20d43c91169 100644
--- a/intern/cycles/kernel/kernel.h
+++ b/intern/cycles/kernel/kernel.h
@@ -40,14 +40,16 @@ void kernel_cpu_path_trace(KernelGlobals *kg, float4 *buffer, unsigned int *rng_
int sample, int x, int y, int offset, int stride);
void kernel_cpu_tonemap(KernelGlobals *kg, uchar4 *rgba, float4 *buffer,
int sample, int resolution, int x, int y, int offset, int stride);
-void kernel_cpu_displace(KernelGlobals *kg, uint4 *input, float3 *offset, int i);
+void kernel_cpu_shader(KernelGlobals *kg, uint4 *input, float3 *output,
+ int type, int i);
#ifdef WITH_OPTIMIZED_KERNEL
void kernel_cpu_optimized_path_trace(KernelGlobals *kg, float4 *buffer, unsigned int *rng_state,
int sample, int x, int y, int offset, int stride);
void kernel_cpu_optimized_tonemap(KernelGlobals *kg, uchar4 *rgba, float4 *buffer,
int sample, int resolution, int x, int y, int offset, int stride);
-void kernel_cpu_optimized_displace(KernelGlobals *kg, uint4 *input, float3 *offset, int i);
+void kernel_cpu_optimized_shader(KernelGlobals *kg, uint4 *input, float3 *output,
+ int type, int i);
#endif
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/kernel_displace.h b/intern/cycles/kernel/kernel_displace.h
index ef6c3810a75..c39e5e43dbb 100644
--- a/intern/cycles/kernel/kernel_displace.h
+++ b/intern/cycles/kernel/kernel_displace.h
@@ -18,17 +18,51 @@
CCL_NAMESPACE_BEGIN
-__device void kernel_displace(KernelGlobals *kg, uint4 *input, float3 *offset, int i)
+__device void kernel_shader_evaluate(KernelGlobals *kg, uint4 *input, float3 *output, ShaderEvalType type, int i)
{
- /* setup shader data */
ShaderData sd;
uint4 in = input[i];
- shader_setup_from_displace(kg, &sd, in.x, in.y, __int_as_float(in.z), __int_as_float(in.w));
+ float3 out;
- /* evaluate */
- float3 P = sd.P;
- shader_eval_displacement(kg, &sd);
- offset[i] = sd.P - P;
+ if(type == SHADER_EVAL_DISPLACE) {
+ /* setup shader data */
+ int object = in.x;
+ int prim = in.y;
+ float u = __int_as_float(in.z);
+ float v = __int_as_float(in.w);
+
+ shader_setup_from_displace(kg, &sd, object, prim, u, v);
+
+ /* evaluate */
+ float3 P = sd.P;
+ shader_eval_displacement(kg, &sd);
+ out = sd.P - P;
+ }
+ else { // SHADER_EVAL_BACKGROUND
+ /* setup ray */
+ Ray ray;
+
+ ray.P = make_float3(0.0f, 0.0f, 0.0f);
+ ray.D = make_float3(__int_as_float(in.x), __int_as_float(in.y), __int_as_float(in.z));
+ ray.t = 0.0f;
+
+#ifdef __RAY_DIFFERENTIALS__
+ ray.dD.dx = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dD.dy = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dP.dx = make_float3(0.0f, 0.0f, 0.0f);
+ ray.dP.dy = make_float3(0.0f, 0.0f, 0.0f);
+#endif
+
+ /* setup shader data */
+ shader_setup_from_background(kg, &sd, &ray);
+
+ /* evaluate */
+ int flag = 0; /* we can't know which type of BSDF this is for */
+ out = shader_eval_background(kg, &sd, flag);
+ }
+
+ /* write output */
+ output[i] = out;
}
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/kernel_optimized.cpp b/intern/cycles/kernel/kernel_optimized.cpp
index ea43e01ab58..c437e06adfa 100644
--- a/intern/cycles/kernel/kernel_optimized.cpp
+++ b/intern/cycles/kernel/kernel_optimized.cpp
@@ -47,11 +47,11 @@ void kernel_cpu_optimized_tonemap(KernelGlobals *kg, uchar4 *rgba, float4 *buffe
kernel_film_tonemap(kg, rgba, buffer, sample, resolution, x, y, offset, stride);
}
-/* Displacement */
+/* Shader Evaluate */
-void kernel_cpu_optimized_displace(KernelGlobals *kg, uint4 *input, float3 *offset, int i)
+void kernel_cpu_optimized_shader(KernelGlobals *kg, uint4 *input, float3 *output, int type, int i)
{
- kernel_displace(kg, input, offset, i);
+ kernel_shader_evaluate(kg, input, output, (ShaderEvalType)type, i);
}
CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 56db4d2b78a..2c03a34df1f 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -78,6 +78,13 @@ CCL_NAMESPACE_BEGIN
//#define __MODIFY_TP__
//#define __QBVH__
+/* Shader Evaluation */
+
+enum ShaderEvalType {
+ SHADER_EVAL_DISPLACE,
+ SHADER_EVAL_BACKGROUND
+};
+
/* Path Tracing */
enum PathTraceDimension {