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:
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;
}