Since version 4.3.0 the build fails on 32-bit architectures (as seen on i686) like this:
[...]/embree-4.4.0/tutorials/forest/forest_device.ispc:131:3:
Error: Unable to find any matching overload for call to function
"rtcSetDeviceMemoryMonitorFunction".
Passed types: (uniform struct RTCDeviceTy * uniform, unmasked uniform
bool(void * uniform ptr, uniform int64 bytes, uniform bool post), void
* uniform)
rtcSetDeviceMemoryMonitorFunction(g_device, monitorMemoryFunction, NULL);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Commit 09cd83e had introduced a discrepancy between two functions: bool monitorMemoryFunction(void* userPtr, ssize_t bytes, bool post) and unmasked uniform bool monitorMemoryFunction(void* uniform ptr, uniform int64 bytes, uniform bool post) in tutorials/forest/forest_device.*. Apparently, the problem is that ssize_t being platform-dependent and usually matching machine word width, while the second function hardcodes int64. I believe it was chosen because there is no ISPC ssize_t type, but perhaps using signed type for byte count is wrong in the first place?
Since version 4.3.0 the build fails on 32-bit architectures (as seen on i686) like this:
Commit 09cd83e had introduced a discrepancy between two functions:
bool monitorMemoryFunction(void* userPtr, ssize_t bytes, bool post)andunmasked uniform bool monitorMemoryFunction(void* uniform ptr, uniform int64 bytes, uniform bool post)intutorials/forest/forest_device.*. Apparently, the problem is thatssize_tbeing platform-dependent and usually matching machine word width, while the second function hardcodesint64. I believe it was chosen because there is no ISPCssize_ttype, but perhaps using signed type for byte count is wrong in the first place?