1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef DO_DEBUG_VERTS 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_DEBUG_VERTS 0 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef PRINT_VERTEX 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PRINT_VERTEX(x) 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(USE_X86_ASM) 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define COPY_DWORDS( j, vb, vertsize, v ) \ 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int __tmp; \ 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __asm__ __volatile__( "rep ; movsl" \ 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org : "=%c" (j), "=D" (vb), "=S" (__tmp) \ 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org : "0" (vertsize), \ 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "D" ((long)vb), \ 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "S" ((long)v) ); \ 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#elif defined(HAVE_LE32_VERTS) 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define COPY_DWORDS( j, vb, vertsize, v ) \ 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for ( j = 0 ; j < vertsize ; j++ ) \ 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vb[j] = CPU_TO_LE32(((GLuint *)v)[j]); \ 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vb += vertsize; \ 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define COPY_DWORDS( j, vb, vertsize, v ) \ 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo { \ 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for ( j = 0 ; j < vertsize ; j++ ) \ 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vb[j] = ((GLuint *)v)[j]; \ 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vb += vertsize; \ 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0) 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if HAVE_QUADS 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(quad)( CTX_ARG, 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v0, 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v1, 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v2, 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v3 ) 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vertsize = GET_VERTEX_DWORDS(); 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint *vb = (GLuint *)ALLOC_VERTS( 4, vertsize); 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (DO_DEBUG_VERTS) { 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fprintf(stderr, "%s\n", __FUNCTION__); 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v0); 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v1); 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v2); 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v3); 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v0 ); 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v1 ); 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v2 ); 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v3 ); 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(quad)( CTX_ARG, 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v0, 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v1, 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v2, 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v3 ) 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vertsize = GET_VERTEX_DWORDS(); 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint *vb = (GLuint *)ALLOC_VERTS( 6, vertsize); 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (DO_DEBUG_VERTS) { 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fprintf(stderr, "%s\n", __FUNCTION__); 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v0); 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v1); 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v2); 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v3); 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v0 ); 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v1 ); 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v3 ); 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v1 ); 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v2 ); 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v3 ); 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(triangle)( CTX_ARG, 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v0, 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v1, 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v2 ) 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vertsize = GET_VERTEX_DWORDS(); 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint *vb = (GLuint *)ALLOC_VERTS( 3, vertsize); 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (DO_DEBUG_VERTS) { 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fprintf(stderr, "%s\n", __FUNCTION__); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v0); 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v1); 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(v2); 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v0 ); 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v1 ); 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v2 ); 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if HAVE_LINES 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(line)( CTX_ARG, 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v0, 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v1 ) 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vertsize = GET_VERTEX_DWORDS(); 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint *vb = (GLuint *)ALLOC_VERTS( 2, vertsize); 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint j; 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v0 ); 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v1 ); 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if HAVE_POINTS 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(point)( CTX_ARG, 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VERTEX *v0 ) 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vertsize = GET_VERTEX_DWORDS(); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint *vb = (GLuint *)ALLOC_VERTS( 1, vertsize); 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int j; 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, v0 ); 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(fast_clipped_poly)( struct gl_context *ctx, const GLuint *elts, 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint n ) 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LOCAL_VARS 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vertsize = GET_VERTEX_DWORDS(); 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint *vb = (GLuint *)ALLOC_VERTS( (n-2) * 3, vertsize ); 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLuint *start = (const GLuint *)VERT(elts[0]); 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint i,j; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (DO_DEBUG_VERTS) { 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fprintf(stderr, "%s\n", __FUNCTION__); 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(VERT(elts[0])); 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(VERT(elts[1])); 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 2 ; i < n ; i++) { 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (DO_DEBUG_VERTS) { 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PRINT_VERTEX(VERT(elts[i])); 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, VERT(elts[i-1]) ); 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, VERT(elts[i]) ); 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COPY_DWORDS( j, vb, vertsize, start ); 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 165