commit 8ccef91ef35de78b3ec6a29ad28197c854b00919
parent 03f1eeb3277adb50fb4453d0821c23824e07a231
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 20 Oct 2021 11:27:59 +0200
Sets required version of StarSP to 0.12.1
Fix API breaks introduced by StarSP 0.12
Diffstat:
9 files changed, 44 insertions(+), 34 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -41,7 +41,7 @@ option(NO_TEST "Disable the test" OFF)
################################################################################
find_package(RCMake 0.3 REQUIRED)
find_package(RSys 0.6 REQUIRED)
-find_package(StarSP 0.5 REQUIRED)
+find_package(StarSP 0.12.1 REQUIRED)
find_package(OpenMP 1.2 REQUIRED)
find_package(Star3D 0.4)
diff --git a/src/smc.h b/src/smc.h
@@ -32,6 +32,7 @@
#ifndef SMC_H
#define SMC_H
+#include <star/ssp.h>
#include <rsys/rsys.h>
#include <limits.h>
@@ -59,7 +60,6 @@
struct logger;
struct mem_allocator;
struct ssp_rng;
-struct ssp_rng_type;
/* Generic type descriptor */
struct smc_type {
@@ -129,7 +129,7 @@ smc_device_create
(struct logger* logger, /* May be NULL <=> use default logger */
struct mem_allocator* allocator, /* May be NULL <=> use default allocator */
const unsigned nthreads_hint, /* Hint on the number of threads to use */
- const struct ssp_rng_type* type, /* May be NULL <=> use default RNG type */
+ const enum ssp_rng_type type, /* SSP_RNG_TYPE_NULL <=> use default RNG type */
struct smc_device** dev);
SMC_API res_T
@@ -143,12 +143,12 @@ smc_device_ref_put
SMC_API res_T
smc_device_set_rng_type
(struct smc_device* dev,
- const struct ssp_rng_type* type);
+ const enum ssp_rng_type type);
SMC_API res_T
smc_device_get_rng_type
(struct smc_device* dev,
- struct ssp_rng_type* type);
+ enum ssp_rng_type* type);
/* Return the maximum number of threads internally used by the device */
SMC_API res_T
diff --git a/src/smc_device.c b/src/smc_device.c
@@ -82,7 +82,7 @@ smc_device_create
(struct logger* logger,
struct mem_allocator* mem_allocator,
const unsigned nthreads_hint,
- const struct ssp_rng_type* rng_type,
+ const enum ssp_rng_type rng_type,
struct smc_device** out_dev)
{
struct smc_device* dev = NULL;
@@ -106,7 +106,8 @@ smc_device_create
dev->nthreads = MMIN(nthreads_hint, (unsigned)omp_get_num_procs());
omp_set_num_threads((int)dev->nthreads);
- res = smc_device_set_rng_type(dev, rng_type ? rng_type : &ssp_rng_threefry);
+ res = smc_device_set_rng_type
+ (dev, rng_type == SSP_RNG_TYPE_NULL ? SSP_RNG_THREEFRY : rng_type);
if(res != RES_OK)
goto error;
@@ -138,14 +139,14 @@ smc_device_ref_put(struct smc_device* dev)
}
res_T
-smc_device_set_rng_type(struct smc_device* dev, const struct ssp_rng_type* type)
+smc_device_set_rng_type(struct smc_device* dev, const enum ssp_rng_type type)
{
size_t i;
res_T res = RES_OK;
struct ssp_rng_proxy* proxy = NULL;
struct ssp_rng** rngs = NULL;
- if(!dev || !type) {
+ if(!dev || type == SSP_RNG_TYPE_NULL) {
/* Skip the error block */
return RES_BAD_ARG;
}
@@ -188,7 +189,7 @@ error:
}
res_T
-smc_device_get_rng_type(struct smc_device* dev, struct ssp_rng_type* type)
+smc_device_get_rng_type(struct smc_device* dev, enum ssp_rng_type* type)
{
if(!dev || !type) return RES_BAD_ARG;
return ssp_rng_proxy_get_type(dev->rng_proxy, type);
diff --git a/src/smc_estimator.c b/src/smc_estimator.c
@@ -218,7 +218,7 @@ smc_solve
#pragma omp critical
{
nfailed += 1;
- if(nfailed >= integrator->max_failures) {
+ if(nfailed > integrator->max_failures) {
ATOMIC_SET(&cancel, 1);
}
}
diff --git a/src/test_smc_device.c b/src/test_smc_device.c
@@ -48,13 +48,15 @@ main(int argc, char** argv)
{
struct logger logger;
struct mem_allocator allocator;
- struct ssp_rng_type type;
+ enum ssp_rng_type type;
struct smc_device* dev;
unsigned nthreads;
(void)argc, (void)argv;
- CHK(smc_device_create(NULL, NULL, SMC_NTHREADS_DEFAULT, NULL, NULL) == RES_BAD_ARG);
- CHK(smc_device_create(NULL, NULL, SMC_NTHREADS_DEFAULT, NULL, &dev) == RES_OK);
+ CHK(smc_device_create
+ (NULL, NULL, SMC_NTHREADS_DEFAULT, SSP_RNG_TYPE_NULL, NULL) == RES_BAD_ARG);
+ CHK(smc_device_create
+ (NULL, NULL, SMC_NTHREADS_DEFAULT, SSP_RNG_TYPE_NULL, &dev) == RES_OK);
CHK(smc_device_get_threads_count(NULL, NULL) == RES_BAD_ARG);
CHK(smc_device_get_threads_count(dev, NULL) == RES_BAD_ARG);
@@ -68,13 +70,15 @@ main(int argc, char** argv)
CHK(smc_device_ref_put(dev) == RES_OK);
CHK(smc_device_ref_put(dev) == RES_OK);
- CHK(smc_device_create(NULL, NULL, 0, NULL, &dev) == RES_BAD_ARG);
+ CHK(smc_device_create(NULL, NULL, 0, SSP_RNG_TYPE_NULL, &dev) == RES_BAD_ARG);
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
CHK(MEM_ALLOCATED_SIZE(&allocator) == 0);
- CHK(smc_device_create(NULL, &allocator, 1, NULL, NULL) == RES_BAD_ARG);
- CHK(smc_device_create(NULL, &allocator, 1, NULL, &dev) == RES_OK);
+ CHK(smc_device_create
+ (NULL, &allocator, 1, SSP_RNG_TYPE_NULL, NULL) == RES_BAD_ARG);
+ CHK(smc_device_create
+ (NULL, &allocator, 1, SSP_RNG_TYPE_NULL, &dev) == RES_OK);
CHK(smc_device_ref_put(dev) == RES_OK);
CHK(MEM_ALLOCATED_SIZE(&allocator) == 0);
@@ -83,31 +87,33 @@ main(int argc, char** argv)
logger_set_stream(&logger, LOG_ERROR, log_stream, NULL);
logger_set_stream(&logger, LOG_WARNING, log_stream, NULL);
- CHK(smc_device_create(&logger, NULL, 1, NULL, NULL) == RES_BAD_ARG);
- CHK(smc_device_create(&logger, NULL, 1, NULL, &dev) == RES_OK);
+ CHK(smc_device_create(&logger, NULL, 1, SSP_RNG_TYPE_NULL, NULL) == RES_BAD_ARG);
+ CHK(smc_device_create(&logger, NULL, 1, SSP_RNG_TYPE_NULL, &dev) == RES_OK);
CHK(smc_device_ref_put(dev) == RES_OK);
- CHK(smc_device_create(&logger, &allocator, 4, NULL, NULL) == RES_BAD_ARG);
- CHK(smc_device_create(&logger, &allocator, 4, NULL, &dev) == RES_OK);
+ CHK(smc_device_create
+ (&logger, &allocator, 4, SSP_RNG_TYPE_NULL, NULL) == RES_BAD_ARG);
+ CHK(smc_device_create
+ (&logger, &allocator, 4, SSP_RNG_TYPE_NULL, &dev) == RES_OK);
- CHK(smc_device_set_rng_type(NULL, NULL) == RES_BAD_ARG);
- CHK(smc_device_set_rng_type(dev, NULL) == RES_BAD_ARG);
- CHK(smc_device_set_rng_type(NULL, &ssp_rng_ranlux48) == RES_BAD_ARG);
- CHK(smc_device_set_rng_type(dev, &ssp_rng_ranlux48) == RES_OK);
+ CHK(smc_device_set_rng_type(NULL, SSP_RNG_TYPE_NULL) == RES_BAD_ARG);
+ CHK(smc_device_set_rng_type(dev, SSP_RNG_TYPE_NULL) == RES_BAD_ARG);
+ CHK(smc_device_set_rng_type(NULL, SSP_RNG_RANLUX48) == RES_BAD_ARG);
+ CHK(smc_device_set_rng_type(dev, SSP_RNG_RANLUX48) == RES_OK);
CHK(smc_device_get_rng_type(NULL, NULL) == RES_BAD_ARG);
CHK(smc_device_get_rng_type(dev, NULL) == RES_BAD_ARG);
CHK(smc_device_get_rng_type(NULL, &type) == RES_BAD_ARG);
CHK(smc_device_get_rng_type(dev, &type) == RES_OK);
- CHK(ssp_rng_type_eq(&type, &ssp_rng_ranlux48) == 1);
+ CHK(type == SSP_RNG_RANLUX48);
- CHK(smc_device_set_rng_type(dev, &ssp_rng_kiss) == RES_OK);
+ CHK(smc_device_set_rng_type(dev, SSP_RNG_KISS) == RES_OK);
CHK(smc_device_get_rng_type(dev, &type) == RES_OK);
- CHK(ssp_rng_type_eq(&type, &ssp_rng_kiss) == 1);
+ CHK(type == SSP_RNG_KISS);
CHK(smc_device_ref_put(dev) == RES_OK);
- CHK(smc_device_create(&logger, &allocator, 4, &ssp_rng_ranlux48, &dev) == RES_OK);
+ CHK(smc_device_create(&logger, &allocator, 4, SSP_RNG_RANLUX48, &dev) == RES_OK);
CHK(smc_device_ref_put(dev) == RES_OK);
logger_release(&logger);
diff --git a/src/test_smc_doubleN.c b/src/test_smc_doubleN.c
@@ -78,7 +78,8 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- CHK(smc_device_create(NULL, &allocator, SMC_NTHREADS_DEFAULT, NULL, &dev) == RES_OK);
+ CHK(smc_device_create
+ (NULL, &allocator, SMC_NTHREADS_DEFAULT, SSP_RNG_TYPE_NULL, &dev) == RES_OK);
integrator.integrand = cos_x;
integrator.type = &smc_doubleN;
diff --git a/src/test_smc_errors.c b/src/test_smc_errors.c
@@ -62,7 +62,8 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- SMC(device_create(NULL, &allocator, SMC_NTHREADS_DEFAULT, NULL, &dev));
+ SMC(device_create
+ (NULL, &allocator, SMC_NTHREADS_DEFAULT, SSP_RNG_TYPE_NULL, &dev));
integrator.integrand = &compute_1;
integrator.type = &smc_double;
diff --git a/src/test_smc_light_path.c b/src/test_smc_light_path.c
@@ -373,8 +373,8 @@ main(int argc, char** argv)
CHK(s3d_scene_view_create(scn, S3D_TRACE, &view) == RES_OK);
- CHK(smc_device_create(NULL, &allocator, SMC_NTHREADS_DEFAULT, NULL, &smc)
- == RES_OK);
+ CHK(smc_device_create
+ (NULL, &allocator, SMC_NTHREADS_DEFAULT, SSP_RNG_TYPE_NULL, &smc) == RES_OK);
integrator.integrand = light_path_integrator;
integrator.type = &smc_float;
diff --git a/src/test_smc_solve.c b/src/test_smc_solve.c
@@ -74,7 +74,8 @@ main(int argc, char** argv)
mem_init_proxy_allocator(&allocator, &mem_default_allocator);
- CHK(smc_device_create(NULL, &allocator, SMC_NTHREADS_DEFAULT, NULL, &dev) == RES_OK);
+ CHK(smc_device_create
+ (NULL, &allocator, SMC_NTHREADS_DEFAULT, SSP_RNG_TYPE_NULL, &dev) == RES_OK);
integrator.integrand = rcp_x;
integrator.type = &smc_double;