@@ -9,6 +9,8 @@ from enum import Enum
99from libc.stdio cimport printf
1010from libc.stdlib cimport free
1111
12+ __version__ = ' 0.0.3'
13+
1214# In this section, we define an aligned memory allocation function,
1315# "aligned_alloc". This should be used throughout this .pyx file to
1416# ensure that memory allocated for use by Embree is 16-byte
@@ -20,13 +22,21 @@ from libc.stdlib cimport free
2022IF UNAME_SYSNAME == " Windows" :
2123 cdef extern from " <malloc.h>" :
2224 cdef void * _aligned_malloc(size_t size, size_t alignment)
25+ cdef void _aligned_free(void * memblock)
2326 cdef void * aligned_alloc(size_t size, size_t alignment):
2427 return _aligned_malloc(size, alignment)
28+ # memory obtained from _aligned_malloc()
29+ # must be freed with _aligned_free()
30+ # while posix_memalign() just uses regular free()
31+ cdef void aligned_free(void * memblock):
32+ _aligned_free(memblock)
2533ELIF UNAME_SYSNAME == " Darwin" :
2634 # malloc is 16-byte mem aligned by default on Darwin
2735 from libc.stdlib cimport malloc
2836 cdef void * aligned_alloc(size_t size, size_t alignment):
2937 return malloc(size)
38+ cdef void aligned_free(void * memblock):
39+ free(memblock)
3040ELSE :
3141 from posix.stdlib cimport posix_memalign
3242 cdef void * aligned_alloc(size_t size, size_t alignment):
4151 elif code != 0 :
4252 raise Exception (' posix_memalign: unknown error code' )
4353 return ptr
54+ cdef void aligned_free(void * memblock):
55+ free(memblock)
4456
4557DEF RTC_MAX_INSTANCE_LEVEL_COUNT = 1
4658
@@ -793,7 +805,7 @@ cdef class Ray1M:
793805 self ._M = M
794806
795807 def __dealloc__ (self ):
796- free (self ._ray)
808+ aligned_free (self ._ray)
797809
798810 @property
799811 def size (self ):
@@ -863,7 +875,7 @@ cdef class RayHit1M:
863875 self ._M = M
864876
865877 def __dealloc__ (self ):
866- free (self ._rayhit)
878+ aligned_free (self ._rayhit)
867879
868880 @property
869881 def size (self ):
@@ -984,27 +996,27 @@ cdef class RayHitNp:
984996 hit.instID[i] = < unsigned * > aligned_alloc(N* sizeof(unsigned ), 0x10 )
985997
986998 def __dealloc__ (self ):
987- free (self ._rayhit.ray.org_x)
988- free (self ._rayhit.ray.org_y)
989- free (self ._rayhit.ray.org_z)
990- free (self ._rayhit.ray.tnear)
991- free (self ._rayhit.ray.dir_x)
992- free (self ._rayhit.ray.dir_y)
993- free (self ._rayhit.ray.dir_z)
994- free (self ._rayhit.ray.time)
995- free (self ._rayhit.ray.tfar)
996- free (self ._rayhit.ray.mask)
997- free (self ._rayhit.ray.id)
998- free (self ._rayhit.ray.flags)
999- free (self ._rayhit.hit.Ng_x)
1000- free (self ._rayhit.hit.Ng_y)
1001- free (self ._rayhit.hit.Ng_z)
1002- free (self ._rayhit.hit.u)
1003- free (self ._rayhit.hit.v)
1004- free (self ._rayhit.hit.primID)
1005- free (self ._rayhit.hit.geomID)
999+ aligned_free (self ._rayhit.ray.org_x)
1000+ aligned_free (self ._rayhit.ray.org_y)
1001+ aligned_free (self ._rayhit.ray.org_z)
1002+ aligned_free (self ._rayhit.ray.tnear)
1003+ aligned_free (self ._rayhit.ray.dir_x)
1004+ aligned_free (self ._rayhit.ray.dir_y)
1005+ aligned_free (self ._rayhit.ray.dir_z)
1006+ aligned_free (self ._rayhit.ray.time)
1007+ aligned_free (self ._rayhit.ray.tfar)
1008+ aligned_free (self ._rayhit.ray.mask)
1009+ aligned_free (self ._rayhit.ray.id)
1010+ aligned_free (self ._rayhit.ray.flags)
1011+ aligned_free (self ._rayhit.hit.Ng_x)
1012+ aligned_free (self ._rayhit.hit.Ng_y)
1013+ aligned_free (self ._rayhit.hit.Ng_z)
1014+ aligned_free (self ._rayhit.hit.u)
1015+ aligned_free (self ._rayhit.hit.v)
1016+ aligned_free (self ._rayhit.hit.primID)
1017+ aligned_free (self ._rayhit.hit.geomID)
10061018 for i in range (RTC_MAX_INSTANCE_LEVEL_COUNT):
1007- free (self ._rayhit.hit.instID[i])
1019+ aligned_free (self ._rayhit.hit.instID[i])
10081020
10091021 @property
10101022 def size (self ):
0 commit comments