Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygent_dd_triemit.h
Go to the documentation of this file.
00001 #ifndef DO_DEBUG_VERTS 00002 #define DO_DEBUG_VERTS 0 00003 #endif 00004 00005 #ifndef PRINT_VERTEX 00006 #define PRINT_VERTEX(x) 00007 #endif 00008 00009 #if defined(USE_X86_ASM) 00010 #define COPY_DWORDS( j, vb, vertsize, v ) \ 00011 do { \ 00012 int __tmp; \ 00013 __asm__ __volatile__( "rep ; movsl" \ 00014 : "=%c" (j), "=D" (vb), "=S" (__tmp) \ 00015 : "0" (vertsize), \ 00016 "D" ((long)vb), \ 00017 "S" ((long)v) ); \ 00018 } while (0) 00019 #elif defined(HAVE_LE32_VERTS) 00020 #define COPY_DWORDS( j, vb, vertsize, v ) \ 00021 do { \ 00022 for ( j = 0 ; j < vertsize ; j++ ) \ 00023 vb[j] = CPU_TO_LE32(((GLuint *)v)[j]); \ 00024 vb += vertsize; \ 00025 } while (0) 00026 #else 00027 #define COPY_DWORDS( j, vb, vertsize, v ) \ 00028 do { \ 00029 for ( j = 0 ; j < vertsize ; j++ ) \ 00030 vb[j] = ((GLuint *)v)[j]; \ 00031 vb += vertsize; \ 00032 } while (0) 00033 #endif 00034 00035 00036 00037 #if HAVE_QUADS 00038 static __inline void TAG(quad)( CTX_ARG, 00039 VERTEX *v0, 00040 VERTEX *v1, 00041 VERTEX *v2, 00042 VERTEX *v3 ) 00043 { 00044 GLuint vertsize = GET_VERTEX_DWORDS(); 00045 GLuint *vb = (GLuint *)ALLOC_VERTS( 4, vertsize); 00046 GLuint j; 00047 00048 if (DO_DEBUG_VERTS) { 00049 fprintf(stderr, "%s\n", __FUNCTION__); 00050 PRINT_VERTEX(v0); 00051 PRINT_VERTEX(v1); 00052 PRINT_VERTEX(v2); 00053 PRINT_VERTEX(v3); 00054 } 00055 00056 COPY_DWORDS( j, vb, vertsize, v0 ); 00057 COPY_DWORDS( j, vb, vertsize, v1 ); 00058 COPY_DWORDS( j, vb, vertsize, v2 ); 00059 COPY_DWORDS( j, vb, vertsize, v3 ); 00060 } 00061 #else 00062 static __inline void TAG(quad)( CTX_ARG, 00063 VERTEX *v0, 00064 VERTEX *v1, 00065 VERTEX *v2, 00066 VERTEX *v3 ) 00067 { 00068 GLuint vertsize = GET_VERTEX_DWORDS(); 00069 GLuint *vb = (GLuint *)ALLOC_VERTS( 6, vertsize); 00070 GLuint j; 00071 00072 if (DO_DEBUG_VERTS) { 00073 fprintf(stderr, "%s\n", __FUNCTION__); 00074 PRINT_VERTEX(v0); 00075 PRINT_VERTEX(v1); 00076 PRINT_VERTEX(v2); 00077 PRINT_VERTEX(v3); 00078 } 00079 00080 COPY_DWORDS( j, vb, vertsize, v0 ); 00081 COPY_DWORDS( j, vb, vertsize, v1 ); 00082 COPY_DWORDS( j, vb, vertsize, v3 ); 00083 COPY_DWORDS( j, vb, vertsize, v1 ); 00084 COPY_DWORDS( j, vb, vertsize, v2 ); 00085 COPY_DWORDS( j, vb, vertsize, v3 ); 00086 } 00087 #endif 00088 00089 00090 static __inline void TAG(triangle)( CTX_ARG, 00091 VERTEX *v0, 00092 VERTEX *v1, 00093 VERTEX *v2 ) 00094 { 00095 GLuint vertsize = GET_VERTEX_DWORDS(); 00096 GLuint *vb = (GLuint *)ALLOC_VERTS( 3, vertsize); 00097 GLuint j; 00098 00099 if (DO_DEBUG_VERTS) { 00100 fprintf(stderr, "%s\n", __FUNCTION__); 00101 PRINT_VERTEX(v0); 00102 PRINT_VERTEX(v1); 00103 PRINT_VERTEX(v2); 00104 } 00105 00106 COPY_DWORDS( j, vb, vertsize, v0 ); 00107 COPY_DWORDS( j, vb, vertsize, v1 ); 00108 COPY_DWORDS( j, vb, vertsize, v2 ); 00109 } 00110 00111 00112 #if HAVE_LINES 00113 static __inline void TAG(line)( CTX_ARG, 00114 VERTEX *v0, 00115 VERTEX *v1 ) 00116 { 00117 GLuint vertsize = GET_VERTEX_DWORDS(); 00118 GLuint *vb = (GLuint *)ALLOC_VERTS( 2, vertsize); 00119 GLuint j; 00120 00121 COPY_DWORDS( j, vb, vertsize, v0 ); 00122 COPY_DWORDS( j, vb, vertsize, v1 ); 00123 } 00124 #endif 00125 00126 #if HAVE_POINTS 00127 static __inline void TAG(point)( CTX_ARG, 00128 VERTEX *v0 ) 00129 { 00130 GLuint vertsize = GET_VERTEX_DWORDS(); 00131 GLuint *vb = (GLuint *)ALLOC_VERTS( 1, vertsize); 00132 int j; 00133 00134 COPY_DWORDS( j, vb, vertsize, v0 ); 00135 } 00136 #endif 00137 00138 00139 static void TAG(fast_clipped_poly)( GLcontext *ctx, const GLuint *elts, 00140 GLuint n ) 00141 { 00142 LOCAL_VARS 00143 GLuint vertsize = GET_VERTEX_DWORDS(); 00144 GLuint *vb = (GLuint *)ALLOC_VERTS( (n-2) * 3, vertsize ); 00145 const GLuint *start = (const GLuint *)VERT(elts[0]); 00146 GLuint i,j; 00147 00148 if (DO_DEBUG_VERTS) { 00149 fprintf(stderr, "%s\n", __FUNCTION__); 00150 PRINT_VERTEX(VERT(elts[0])); 00151 PRINT_VERTEX(VERT(elts[1])); 00152 } 00153 00154 for (i = 2 ; i < n ; i++) { 00155 if (DO_DEBUG_VERTS) { 00156 PRINT_VERTEX(VERT(elts[i])); 00157 } 00158 00159 COPY_DWORDS( j, vb, vertsize, VERT(elts[i-1]) ); 00160 COPY_DWORDS( j, vb, vertsize, VERT(elts[i]) ); 00161 COPY_DWORDS( j, vb, vertsize, start ); 00162 } 00163 } 00164 Generated on Sun May 27 2012 04:20:47 for ReactOS by
1.7.6.1
|