solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

commit ea2b1ce9cfc01c57ebad7cacf11f517885ad5332
parent 90d0d20e67868275d1b8c3edeb128441ccad2cfc
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 23 Jan 2017 14:46:30 +0100

Fix GCC warnings

Diffstat:
Msrc/ssol.h | 2+-
Msrc/ssol_estimator.c | 85++++++++++++++++++++-----------------------------------------------------------
Msrc/ssol_estimator_c.h | 28+++++++++++++---------------
Msrc/ssol_solver.c | 18+++++++++---------
4 files changed, 44 insertions(+), 89 deletions(-)

diff --git a/src/ssol.h b/src/ssol.h @@ -755,7 +755,7 @@ ssol_estimator_get_status SSOL_API res_T ssol_estimator_get_receiver_status - (const struct ssol_estimator* estimator, + (struct ssol_estimator* estimator, const struct ssol_instance* instance, const enum ssol_side_flag side, struct ssol_estimator_status* status); diff --git a/src/ssol_estimator.c b/src/ssol_estimator.c @@ -43,17 +43,6 @@ estimator_release(ref_T* ref) SSOL(device_ref_put(dev)); } -static res_T -register_receiver - (struct ssol_estimator* estimator, - const struct ssol_instance* instance) -{ - const struct mc_data_2 d = MC_DATA2_NULL__; - if (htable_receiver_find(&estimator->global_receivers, &instance)) - return RES_OK; - return htable_receiver_set(&estimator->global_receivers, &instance, &d); -} - /******************************************************************************* * Local functions ******************************************************************************/ @@ -66,22 +55,23 @@ estimator_create_global_receivers int has_sampled = 0; int has_receiver = 0; ASSERT(scene && estimator); - + htable_instance_begin(&scene->instances_rt, &it); htable_instance_end(&scene->instances_rt, &end); while (!htable_instance_iterator_eq(&it, &end)) { - struct ssol_instance* inst = *htable_instance_iterator_data_get(&it); + const struct ssol_instance* inst = *htable_instance_iterator_data_get(&it); htable_instance_iterator_next(&it); if (inst->receiver_mask) { - res_T res = register_receiver(estimator, inst); + res_T res = htable_receiver_set + (&estimator->global_receivers, &inst, &MC_DATA2_NULL); if (res != RES_OK) return res; has_receiver = 1; } - /* FIXME: should not sample virtual (material) instance - as material is used to compute output dir */ + /* FIXME: should not sample virtual (material) instance as material is used + * to compute output dir */ if (inst->sample) has_sampled = 1; } @@ -98,33 +88,6 @@ estimator_create_global_receivers return RES_OK; } -#define GET_RCV_DTA(r, i, s) \ - struct mc_data_2* d___;\ - if (!(i->receiver_mask & s)) return NULL;\ - d___ = htable_receiver_find(r, &i);\ - if (!d___) return NULL;\ - return s == SSOL_FRONT ? &d___->front : &d___->back - -const struct mc_data* -get_receiver_cdata - (const struct htable_receiver* receivers, - const struct ssol_instance* instance, - const enum ssol_side_flag side) -{ - const GET_RCV_DTA((struct htable_receiver*)receivers, instance, side); -} - -struct mc_data* -get_receiver_data - (struct htable_receiver* receivers, - const struct ssol_instance* instance, - const enum ssol_side_flag side) -{ - GET_RCV_DTA(receivers, instance, side); -} - -#undef GET_RCV_DTA - /******************************************************************************* * Exported ssol_estimator functions ******************************************************************************/ @@ -208,33 +171,32 @@ ssol_estimator_get_status res_T ssol_estimator_get_receiver_status - (const struct ssol_estimator* estimator, + (struct ssol_estimator* estimator, const struct ssol_instance* instance, const enum ssol_side_flag side, struct ssol_estimator_status* status) { const struct mc_data* rcv_data = NULL; if (!estimator || !instance || !status - || (side != SSOL_BACK && side != SSOL_FRONT)) + || (side != SSOL_BACK && side != SSOL_FRONT)) return RES_BAD_ARG; - /* check if a receiver is defined for this instance/side */ - rcv_data = get_receiver_cdata(&estimator->global_receivers, instance, side); - if (rcv_data == NULL) - return RES_BAD_ARG; + /* Check if a receiver is defined for this instance/side */ + rcv_data = estimator_get_receiver_data + (&estimator->global_receivers, instance, side); + if(rcv_data == NULL) return RES_BAD_ARG; status->N = estimator->realisation_count; status->Nf = estimator->failed_count; - status->E = rcv_data->weight / (double) status->N; - status->V = rcv_data->sqr_weight / (double) status->N - status->E * status->E; - status->SE = (status->V > 0) ? sqrt(status->V / (double) status->N) : 0; + status->E = rcv_data->weight / (double)status->N; + status->V = rcv_data->sqr_weight / (double)status->N - status->E * status->E; + status->SE = (status->V > 0) ? sqrt(status->V / (double)status->N) : 0; return RES_OK; } res_T ssol_estimator_get_count -(const struct ssol_estimator* estimator, - size_t* count) + (const struct ssol_estimator* estimator, size_t* count) { if (!estimator || !count) return RES_BAD_ARG; *count = estimator->realisation_count; @@ -243,8 +205,7 @@ ssol_estimator_get_count res_T ssol_estimator_get_failed_count -(const struct ssol_estimator* estimator, - size_t* count) + (const struct ssol_estimator* estimator, size_t* count) { if (!estimator || !count) return RES_BAD_ARG; *count = estimator->failed_count; @@ -252,27 +213,23 @@ ssol_estimator_get_failed_count } res_T -ssol_estimator_clear -(struct ssol_estimator* estimator) +ssol_estimator_clear(struct ssol_estimator* estimator) { struct htable_receiver_iterator it, end; if (!estimator) return RES_BAD_ARG; estimator->realisation_count = 0; - CLEAR_MC_DATA(estimator->shadow); - CLEAR_MC_DATA(estimator->missing); + estimator->shadow = MC_DATA_NULL; + estimator->missing = MC_DATA_NULL; htable_receiver_begin(&estimator->global_receivers, &it); htable_receiver_end(&estimator->global_receivers, &end); while (!htable_receiver_iterator_eq(&it, &end)) { struct mc_data_2* estimator_data = htable_receiver_iterator_data_get(&it); - ASSERT(estimator_data); htable_receiver_iterator_next(&it); - CLEAR_MC_DATA2(*estimator_data); + *estimator_data = MC_DATA2_NULL; } - return RES_OK; } - diff --git a/src/ssol_estimator_c.h b/src/ssol_estimator_c.h @@ -37,8 +37,6 @@ struct mc_data { #define MC_DATA_NULL__ { 0, 0 } static const struct mc_data MC_DATA_NULL = MC_DATA_NULL__; -#define CLEAR_MC_DATA(d) ((d).weight=0,(d).sqr_weight=0) - struct mc_data_2 { struct mc_data front; struct mc_data back; @@ -47,16 +45,14 @@ struct mc_data_2 { #define MC_DATA2_NULL__ { MC_DATA_NULL__, MC_DATA_NULL__ } static const struct mc_data_2 MC_DATA2_NULL = MC_DATA2_NULL__; -#define CLEAR_MC_DATA2(d) (CLEAR_MC_DATA((d).front),CLEAR_MC_DATA((d).back)) - -static INLINE void +static INLINE void init_mc_data2 (struct mem_allocator* alloc, struct mc_data_2* data) { (void)alloc; ASSERT(data); - CLEAR_MC_DATA2(*data); + *data = MC_DATA2_NULL; } /* Define the htable_receiver data structure */ @@ -85,16 +81,18 @@ estimator_create_global_receivers (struct ssol_estimator* estimator, struct ssol_scene* scene); -const struct mc_data* -get_receiver_cdata - (const struct htable_receiver* receivers, - const struct ssol_instance* instance, - const enum ssol_side_flag side); - -struct mc_data* - get_receiver_data +static FINLINE struct mc_data* +estimator_get_receiver_data (struct htable_receiver* receivers, const struct ssol_instance* instance, - const enum ssol_side_flag side); + const enum ssol_side_flag side) +{ + struct mc_data_2* data2; + ASSERT(receivers && instance); + if(!(instance->receiver_mask & (int)side)) return NULL; + data2 = htable_receiver_find(receivers, &instance); + if(!data2) return NULL; + return side == SSOL_FRONT ? &data2->front : &data2->back; +} #endif /* SSOL_ESTIMATOR_C_H */ diff --git a/src/ssol_solver.c b/src/ssol_solver.c @@ -354,23 +354,23 @@ ssol_solve if(res != RES_OK) goto error; S3D(scene_view_compute_area(view_samp, &sampled_area)); - /* create per-receiver global MC data */ + /* Create per-receiver global MC data */ res = estimator_create_global_receivers(estimator, scn); if (res != RES_OK) goto error; /* Create a RNG proxy from the submitted RNG state */ res = ssp_rng_proxy_create_from_rng - (scn->dev->allocator, rng_state, nthreads, &rng_proxy); + (scn->dev->allocator, rng_state, scn->dev->nthreads, &rng_proxy); if(res != RES_OK) goto error; /* Create per thread data structures */ #define CREATE(Data) { \ ASSERT(!(Data)); \ - if(!sa_add((Data), nthreads)) { \ + if(!sa_add((Data), scn->dev->nthreads)) { \ res = RES_BAD_ARG; \ goto error; \ } \ - memset((Data), 0, sizeof((Data)[0])*nthreads); \ + memset((Data), 0, sizeof((Data)[0])*scn->dev->nthreads); \ } (void)0 CREATE(rngs); CREATE(bsdfs); @@ -436,15 +436,15 @@ ssol_solve if(point_is_receiver(&pt)) { const res_T res_local = point_dump(&pt, (size_t)i, depth, output); - struct mc_data* global_recv = NULL; + struct mc_data* mc_rcv = NULL; if(res_local != RES_OK) { ATOMIC_SET(&res, res_local); break; } - global_recv = get_receiver_data(global_receiver, pt.inst, pt.side); - ASSERT(global_recv != NULL); - global_recv->weight += pt.weight; - global_recv->sqr_weight += pt.weight*pt.weight; + mc_rcv = estimator_get_receiver_data(global_receiver, pt.inst, pt.side); + ASSERT(mc_rcv); + mc_rcv->weight += pt.weight; + mc_rcv->sqr_weight += pt.weight*pt.weight; hit_a_receiver = 1; }