* GPU kernel can now be compiled without __NON_PROGRESSIVE__ again, was broken after my last commit. Also add a check for have_error(), in case the GPU kernel comes without Non-Progressive, to avoid a crash.

* Don't compile progressive kernel twice on CPU, if __NON_PROGRESSIVE__ would be disabled there.
This commit is contained in:
Thomas Dinges
2013-08-09 20:03:49 +00:00
parent be7b4e26b1
commit 743a7a4a4b
6 changed files with 23 additions and 14 deletions

View File

@@ -572,8 +572,11 @@ public:
/* get kernel function */
if(progressive)
cuda_assert(cuModuleGetFunction(&cuPathTrace, cuModule, "kernel_cuda_path_trace_progressive"))
else
else {
cuda_assert(cuModuleGetFunction(&cuPathTrace, cuModule, "kernel_cuda_path_trace_non_progressive"))
if(have_error())
return;
}
/* pass in parameters */
int offset = 0;

View File

@@ -90,10 +90,12 @@ void kernel_tex_copy(KernelGlobals *kg, const char *name, device_ptr mem, size_t
void kernel_cpu_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state, int sample, int x, int y, int offset, int stride)
{
if(kernel_data.integrator.progressive)
kernel_path_trace_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
else
#ifdef __NON_PROGRESSIVE__
if(!kernel_data.integrator.progressive)
kernel_path_trace_non_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
else
#endif
kernel_path_trace_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
}
/* Tonemapping */

View File

@@ -35,6 +35,7 @@ extern "C" __global__ void kernel_cuda_path_trace_progressive(float *buffer, uin
kernel_path_trace_progressive(NULL, buffer, rng_state, sample, x, y, offset, stride);
}
#ifdef __NON_PROGRESSIVE__
extern "C" __global__ void kernel_cuda_path_trace_non_progressive(float *buffer, uint *rng_state, int sample, int sx, int sy, int sw, int sh, int offset, int stride)
{
int x = sx + blockDim.x*blockIdx.x + threadIdx.x;
@@ -43,6 +44,7 @@ extern "C" __global__ void kernel_cuda_path_trace_non_progressive(float *buffer,
if(x < sx + sw && y < sy + sh)
kernel_path_trace_non_progressive(NULL, buffer, rng_state, sample, x, y, offset, stride);
}
#endif
extern "C" __global__ void kernel_cuda_tonemap(uchar4 *rgba, float *buffer, int sample, int sx, int sy, int sw, int sh, int offset, int stride)
{

View File

@@ -1194,6 +1194,7 @@ __device void kernel_path_trace_progressive(KernelGlobals *kg,
path_rng_end(kg, rng_state, rng);
}
#ifdef __NON_PROGRESSIVE__
__device void kernel_path_trace_non_progressive(KernelGlobals *kg,
__global float *buffer, __global uint *rng_state,
int sample, int x, int y, int offset, int stride)
@@ -1215,11 +1216,7 @@ __device void kernel_path_trace_non_progressive(KernelGlobals *kg,
float4 L;
if (ray.t != 0.0f)
#ifdef __NON_PROGRESSIVE__
L = kernel_path_non_progressive(kg, &rng, sample, ray, buffer);
#else
L = kernel_path_progressive(kg, &rng, sample, ray, buffer);
#endif
else
L = make_float4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -1228,6 +1225,7 @@ __device void kernel_path_trace_non_progressive(KernelGlobals *kg,
path_rng_end(kg, rng_state, rng);
}
#endif
CCL_NAMESPACE_END

View File

@@ -39,10 +39,12 @@ CCL_NAMESPACE_BEGIN
void kernel_cpu_sse2_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state, int sample, int x, int y, int offset, int stride)
{
if(kernel_data.integrator.progressive)
kernel_path_trace_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
else
#ifdef __NON_PROGRESSIVE__
if(!kernel_data.integrator.progressive)
kernel_path_trace_non_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
else
#endif
kernel_path_trace_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
}
/* Tonemapping */

View File

@@ -41,10 +41,12 @@ CCL_NAMESPACE_BEGIN
void kernel_cpu_sse3_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state, int sample, int x, int y, int offset, int stride)
{
if(kernel_data.integrator.progressive)
kernel_path_trace_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
else
#ifdef __NON_PROGRESSIVE__
if(!kernel_data.integrator.progressive)
kernel_path_trace_non_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
else
#endif
kernel_path_trace_progressive(kg, buffer, rng_state, sample, x, y, offset, stride);
}
/* Tonemapping */