From 4a427a441b37ad0539e3c758b31a384edf8b7c76 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 7 Feb 2012 17:32:01 +0000 Subject: [PATCH] Fix #30049: cycles noise texture producing nan values with some texture coordinates, due to int overflow. Also minor tweak in shader code to avoid copying uninitialized values, should have no effect though because they were not used. --- intern/cycles/kernel/kernel_shader.h | 11 ++++++----- intern/cycles/kernel/svm/svm_noise.h | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index 7e0b0ff4d0f..46ef5d2022a 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -368,12 +368,13 @@ __device int shader_bsdf_sample(KernelGlobals *kg, const ShaderData *sd, #else label = svm_bsdf_sample(sd, sc, randu, randv, &eval, omega_in, domega_in, pdf); #endif + if(*pdf != 0.0f) { + bsdf_eval_init(bsdf_eval, sc->type, eval*sc->weight, kernel_data.film.use_light_pass); - bsdf_eval_init(bsdf_eval, sc->type, eval*sc->weight, kernel_data.film.use_light_pass); - - if(sd->num_closure > 1 && *pdf != 0.0f) { - float sweight = sc->sample_weight; - _shader_bsdf_multi_eval(sd, *omega_in, pdf, sampled, bsdf_eval, *pdf*sweight, sweight); + if(sd->num_closure > 1) { + float sweight = sc->sample_weight; + _shader_bsdf_multi_eval(sd, *omega_in, pdf, sampled, bsdf_eval, *pdf*sweight, sweight); + } } return label; diff --git a/intern/cycles/kernel/svm/svm_noise.h b/intern/cycles/kernel/svm/svm_noise.h index 28ad028ad0e..1d3ace061ab 100644 --- a/intern/cycles/kernel/svm/svm_noise.h +++ b/intern/cycles/kernel/svm/svm_noise.h @@ -84,8 +84,9 @@ __device uint phash(int kx, int ky, int kz, int3 p) __device float floorfrac(float x, int* i) { - *i = quick_floor(x); - return x - *i; + float f = floorf(x); + *i = (int)f; + return x - f; } __device float fade(float t)