Home | History | Annotate | Download | only in draw
      1 /**************************************************************************
      2  *
      3  * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
      4  * All Rights Reserved.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the
      8  * "Software"), to deal in the Software without restriction, including
      9  * without limitation the rights to use, copy, modify, merge, publish,
     10  * distribute, sub license, and/or sell copies of the Software, and to
     11  * permit persons to whom the Software is furnished to do so, subject to
     12  * the following conditions:
     13  *
     14  * The above copyright notice and this permission notice (including the
     15  * next paragraph) shall be included in all copies or substantial portions
     16  * of the Software.
     17  *
     18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     19  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     21  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
     22  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     23  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     24  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     25  *
     26  **************************************************************************/
     27 
     28 /*
     29  * Functions for specifying the post-transformation vertex layout.
     30  *
     31  * Author:
     32  *    Brian Paul
     33  *    Keith Whitwell
     34  */
     35 
     36 
     37 #include "draw/draw_private.h"
     38 #include "draw/draw_vertex.h"
     39 
     40 
     41 /**
     42  * Compute the size of a vertex, in dwords/floats, to update the
     43  * vinfo->size field.
     44  */
     45 void
     46 draw_compute_vertex_size(struct vertex_info *vinfo)
     47 {
     48    uint i;
     49 
     50    vinfo->size = 0;
     51    for (i = 0; i < vinfo->num_attribs; i++)
     52       vinfo->size += draw_translate_vinfo_size(vinfo->attrib[i].emit);
     53 
     54    assert(vinfo->size % 4 == 0);
     55    /* in dwords */
     56    vinfo->size /= 4;
     57 }
     58 
     59 
     60 void
     61 draw_dump_emitted_vertex(const struct vertex_info *vinfo, const uint8_t *data)
     62 {
     63    unsigned i;
     64 
     65    for (i = 0; i < vinfo->num_attribs; i++) {
     66       switch (vinfo->attrib[i].emit) {
     67       case EMIT_OMIT:
     68          debug_printf("EMIT_OMIT:");
     69          break;
     70       case EMIT_1F:
     71          debug_printf("EMIT_1F:\t");
     72          debug_printf("%f ", *(float *)data); data += sizeof(float);
     73          break;
     74       case EMIT_1F_PSIZE:
     75          debug_printf("EMIT_1F_PSIZE:\t");
     76          debug_printf("%f ", *(float *)data); data += sizeof(float);
     77          break;
     78       case EMIT_2F:
     79          debug_printf("EMIT_2F:\t");
     80          debug_printf("%f ", *(float *)data); data += sizeof(float);
     81          debug_printf("%f ", *(float *)data); data += sizeof(float);
     82          break;
     83       case EMIT_3F:
     84          debug_printf("EMIT_3F:\t");
     85          debug_printf("%f ", *(float *)data); data += sizeof(float);
     86          debug_printf("%f ", *(float *)data); data += sizeof(float);
     87          debug_printf("%f ", *(float *)data); data += sizeof(float);
     88          data += sizeof(float);
     89          break;
     90       case EMIT_4F:
     91          debug_printf("EMIT_4F:\t");
     92          debug_printf("%f ", *(float *)data); data += sizeof(float);
     93          debug_printf("%f ", *(float *)data); data += sizeof(float);
     94          debug_printf("%f ", *(float *)data); data += sizeof(float);
     95          debug_printf("%f ", *(float *)data); data += sizeof(float);
     96          break;
     97       case EMIT_4UB:
     98          debug_printf("EMIT_4UB:\t");
     99          debug_printf("%u ", *data++);
    100          debug_printf("%u ", *data++);
    101          debug_printf("%u ", *data++);
    102          debug_printf("%u ", *data++);
    103          break;
    104       case EMIT_4UB_BGRA:
    105          debug_printf("EMIT_4UB_BGRA:\t");
    106          debug_printf("%u ", *data++);
    107          debug_printf("%u ", *data++);
    108          debug_printf("%u ", *data++);
    109          debug_printf("%u ", *data++);
    110          break;
    111       default:
    112          assert(0);
    113       }
    114       debug_printf("\n");
    115    }
    116    debug_printf("\n");
    117 }
    118