draw: fix some unsigned vs ushort confusion
authorKeith Whitwell <keith@tungstengraphics.com>
Sun, 23 Mar 2008 18:21:00 +0000 (18:21 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Sun, 23 Mar 2008 18:21:00 +0000 (18:21 +0000)
Middle-end elements are ushort, but prior to that have to treat all
elements as unsigned to avoid wrapping and/or overruns.

src/gallium/auxiliary/draw/draw_pt.h
src/gallium/auxiliary/draw/draw_pt_elts.c
src/gallium/auxiliary/draw/draw_pt_vcache.c

index 1b81d196f62dbab36e907130ab0a3e0d483bff55..f56fa8d5ccd460db0cd984460583dc122a089a00 100644 (file)
@@ -35,7 +35,7 @@
 \r
 #include "pipe/p_compiler.h"\r
 \r
-typedef ushort (*pt_elt_func)( const void *elts, ushort idx );\r
+typedef unsigned (*pt_elt_func)( const void *elts, unsigned idx );\r
 \r
 \r
 /* The "front end" - prepare sets of fetch, draw elements for the\r
index 585b83fa9031dd4bc18ab24c1586a344e5b3e281..f337f71ea0ef7fa0d87ccc464ecc2486452d5cd6 100644 (file)
  * the start value into a pointer.  \r
  */\r
 \r
-static ushort elt_uint( const void *elts, ushort idx )\r
+static unsigned elt_uint( const void *elts, unsigned idx )\r
 {\r
    return *(((const uint *)elts) + idx);\r
 }\r
 \r
-static ushort elt_ushort( const void *elts, ushort idx )\r
+static unsigned elt_ushort( const void *elts, unsigned idx )\r
 {\r
    return *(((const ushort *)elts) + idx);\r
 }\r
 \r
-static ushort elt_ubyte( const void *elts, ushort idx )\r
+static unsigned elt_ubyte( const void *elts, unsigned idx )\r
 {\r
    return *(((const ubyte *)elts) + idx);\r
 }\r
 \r
-static ushort elt_vert( const void *elts, ushort idx )\r
+static unsigned elt_vert( const void *elts, unsigned idx )\r
 {\r
    return (const ubyte *)elts - (const ubyte *)NULL + idx;\r
 }\r
index 07e9f0ae5fabbdb635441dc6da6eb611110bf590..98c22eb4d4a563f9e566081404266b52e2c78405 100644 (file)
@@ -45,7 +45,7 @@
 struct vcache_frontend {
    struct draw_pt_front_end base;
 
-   ushort in[CACHE_MAX];
+   unsigned in[CACHE_MAX];
    ushort out[CACHE_MAX];
 
    ushort draw_elts[DRAW_MAX];
@@ -74,13 +74,14 @@ static void vcache_flush( struct vcache_frontend *vcache )
    }
 #endif
 
-   if (vcache->draw_count)
+   if (vcache->draw_count) {
       vcache->middle->run( vcache->middle,
                            vcache->output_prim,
                            vcache->fetch_elts,
                            vcache->fetch_count,
                            vcache->draw_elts,
                            vcache->draw_count );
+   }
 
    memset(vcache->in, ~0, sizeof(vcache->in));
    vcache->fetch_count = 0;
@@ -100,9 +101,7 @@ static void vcache_check_flush( struct vcache_frontend *vcache )
 static void vcache_elt( struct vcache_frontend *vcache,
                         unsigned felt )
 {
-   // ushort felt = elt(draw, i);
-
-   ushort idx = felt % CACHE_MAX;
+   unsigned idx = felt % CACHE_MAX;
 
    if (vcache->in[idx] != felt) {
       assert(vcache->fetch_count < FETCH_MAX);