5 * \date 20 decembre 2009
15 * \def uint64 entier non signe 64 bits
16 * \def int64 entier signe 64 bits
17 * \def uint32 entier non signe 32 bits
19 typedef unsigned long long int uint64 ;
20 typedef unsigned int uint32;
21 typedef long long int int64 ;
22 typedef long int int32 ;
24 typedef unsigned short t_cumul_1 ;
25 typedef unsigned int t_cumul_x ;
26 typedef unsigned long long t_cumul_x2 ;
28 typedef unsigned int t_sum_1 ;
29 typedef unsigned long long t_sum_x ;
30 typedef unsigned long long t_sum_x2 ;
34 * \struct pixel_cumul structures.h
36 * \brief structure des images cumulees
38 * Version d'algorithme sans SSE2 \n
39 * les images cumulees correspondent a \n
40 * [sum 1, sum x, sum x^2] \n
42 * Trois donnees a stocker de dynamique differente \n
44 * cas d'images en profondeur 16 bits \n
45 * avec xum_x2 sur 64 bits => taill image sur 14 bits soit 16000 x 16000 \n
46 * longueur des segments sur 15 bits
48 sum_1 : 0/1 + 14b + 15b = 29b => unsigned int
49 sum_x : 16b + 14b + 15b = 45b => unsigned long int
50 sum_x2 : 32b + 14b + 15b = 61b => unsigned long int
53 * Avec la definition suivante, les contributions des segments
54 * ne pourrons etre que positives. Le signe associe au segment devra
55 * etre memorise par une autre variable (code_segment)
65 * structure pour la smem des kernels cumuls
75 * structure pour le smem des kernels contribs
86 * \struct snake_node structures.h
88 * \brief noeud du snake defini par liste chainee
90 * Cette structure memorise la position du noeud
91 * ET les informations concernant le segment qui
92 * part de ce noeud et va au noeud suivant dans
98 /* contribution du segment allant de ce noeud */
99 /* au noeud suivant, defini dans l'ordre trigo */
100 /* l'union pixel_cumul est definie en premier */
101 /* pour permettre l'alignement memoire */
102 struct pixel_cumul contrib ;
104 int code_segment ; /* signe de la contrib */
105 int freeman_in ; /* du noeud d'arrivee du segment (ordre trigo) */
106 int freeman_out ; /* du noeud de depart du segment (ordre trigo) */
109 uint32 posi ; /* position i du noeud */
110 uint32 posj ; /* position j du noeud */
111 uint32 centre_i ; /* centre i du segment */
112 uint32 centre_j ; /* centre j du segment */
114 int last_move ; /* dernier test deplacement accepte */
116 /* lien liste chainee snake2D */
117 struct snake_node *noeud_suiv ; /* dans le sens trigo */
118 struct snake_node *noeud_prec ;
121 /* lien liste chainee snake3D */
125 struct snake_node_gpu
131 int code_segment ; /* signe de la contrib */
132 int freeman_in ; /* du noeud d'arrivee du segment (ordre trigo) */
133 int freeman_out ; /* du noeud de depart du segment (ordre trigo) */
136 uint32 posi ; /* position i du noeud */
137 uint32 posj ; /* position j du noeud */
138 uint32 centre_i ; /* centre i du segment */
139 uint32 centre_j ; /* centre j du segment */
141 int last_move ; /* dernier test deplacement accepte */
144 /* pour mémoriser les coordonnées des diagonales des rectangles en multisnake*/
145 struct t_rectangle_snake {