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