Fix #35804: NVidia OpenCL render issue after sampler changes, workaround what looks like a compiler bug.

This commit is contained in:
Brecht Van Lommel
2013-06-21 12:34:34 +00:00
parent 2df82a2a2b
commit e1f79351d6
2 changed files with 18 additions and 2 deletions

View File

@@ -249,7 +249,11 @@ __device float4 kernel_path_progressive(KernelGlobals *kg, RNG *rng, int sample,
#endif #endif
PathState state; PathState state;
int rng_offset = PRNG_BASE_NUM; int rng_offset = PRNG_BASE_NUM;
#ifdef __CMJ__
int num_samples = kernel_data.integrator.aa_samples; int num_samples = kernel_data.integrator.aa_samples;
#else
int num_samples = 0;
#endif
path_state_init(&state); path_state_init(&state);
@@ -765,7 +769,11 @@ __device_noinline void kernel_path_non_progressive_lighting(KernelGlobals *kg, R
float min_ray_pdf, float ray_pdf, PathState state, float min_ray_pdf, float ray_pdf, PathState state,
int rng_offset, PathRadiance *L, __global float *buffer) int rng_offset, PathRadiance *L, __global float *buffer)
{ {
#ifdef __CMJ__
int aa_samples = kernel_data.integrator.aa_samples; int aa_samples = kernel_data.integrator.aa_samples;
#else
int aa_samples = 0;
#endif
#ifdef __AO__ #ifdef __AO__
/* ambient occlusion */ /* ambient occlusion */
@@ -964,7 +972,11 @@ __device float4 kernel_path_non_progressive(KernelGlobals *kg, RNG *rng, int sam
float ray_pdf = 0.0f; float ray_pdf = 0.0f;
PathState state; PathState state;
int rng_offset = PRNG_BASE_NUM; int rng_offset = PRNG_BASE_NUM;
#ifdef __CMJ__
int aa_samples = kernel_data.integrator.aa_samples; int aa_samples = kernel_data.integrator.aa_samples;
#else
int aa_samples = 0;
#endif
path_state_init(&state); path_state_init(&state);
@@ -1141,7 +1153,11 @@ __device void kernel_path_trace(KernelGlobals *kg,
float filter_u; float filter_u;
float filter_v; float filter_v;
#ifdef __CMJ__
int num_samples = kernel_data.integrator.aa_samples; int num_samples = kernel_data.integrator.aa_samples;
#else
int num_samples = 0;
#endif
path_rng_init(kg, rng_state, sample, num_samples, &rng, x, y, &filter_u, &filter_v); path_rng_init(kg, rng_state, sample, num_samples, &rng, x, y, &filter_u, &filter_v);

View File

@@ -125,9 +125,9 @@ __device_inline float path_rng_1D(KernelGlobals *kg, RNG *rng, int sample, int n
float shift; float shift;
if(dimension & 1) if(dimension & 1)
shift = (*rng >> 16)/((float)0xFFFF); shift = (*rng >> 16) * (1.0f/(float)0xFFFF);
else else
shift = (*rng & 0xFFFF)/((float)0xFFFF); shift = (*rng & 0xFFFF) * (1.0f/(float)0xFFFF);
return r + shift - floorf(r + shift); return r + shift - floorf(r + shift);
#endif #endif