draw_vertex.c revision 53d4706c6c0922160f310834daaec5718ff1c511
1898d68a3762f84f0d435cda2f6aafddd356d1788Brian/************************************************************************** 2898d68a3762f84f0d435cda2f6aafddd356d1788Brian * 3898d68a3762f84f0d435cda2f6aafddd356d1788Brian * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4898d68a3762f84f0d435cda2f6aafddd356d1788Brian * All Rights Reserved. 5898d68a3762f84f0d435cda2f6aafddd356d1788Brian * 6898d68a3762f84f0d435cda2f6aafddd356d1788Brian * Permission is hereby granted, free of charge, to any person obtaining a 7898d68a3762f84f0d435cda2f6aafddd356d1788Brian * copy of this software and associated documentation files (the 8898d68a3762f84f0d435cda2f6aafddd356d1788Brian * "Software"), to deal in the Software without restriction, including 9898d68a3762f84f0d435cda2f6aafddd356d1788Brian * without limitation the rights to use, copy, modify, merge, publish, 10898d68a3762f84f0d435cda2f6aafddd356d1788Brian * distribute, sub license, and/or sell copies of the Software, and to 11898d68a3762f84f0d435cda2f6aafddd356d1788Brian * permit persons to whom the Software is furnished to do so, subject to 12898d68a3762f84f0d435cda2f6aafddd356d1788Brian * the following conditions: 13898d68a3762f84f0d435cda2f6aafddd356d1788Brian * 14898d68a3762f84f0d435cda2f6aafddd356d1788Brian * The above copyright notice and this permission notice (including the 15898d68a3762f84f0d435cda2f6aafddd356d1788Brian * next paragraph) shall be included in all copies or substantial portions 16898d68a3762f84f0d435cda2f6aafddd356d1788Brian * of the Software. 17898d68a3762f84f0d435cda2f6aafddd356d1788Brian * 18898d68a3762f84f0d435cda2f6aafddd356d1788Brian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19898d68a3762f84f0d435cda2f6aafddd356d1788Brian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20898d68a3762f84f0d435cda2f6aafddd356d1788Brian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21898d68a3762f84f0d435cda2f6aafddd356d1788Brian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22898d68a3762f84f0d435cda2f6aafddd356d1788Brian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23898d68a3762f84f0d435cda2f6aafddd356d1788Brian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24898d68a3762f84f0d435cda2f6aafddd356d1788Brian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25898d68a3762f84f0d435cda2f6aafddd356d1788Brian * 26898d68a3762f84f0d435cda2f6aafddd356d1788Brian **************************************************************************/ 27898d68a3762f84f0d435cda2f6aafddd356d1788Brian 28898d68a3762f84f0d435cda2f6aafddd356d1788Brian/* 29898d68a3762f84f0d435cda2f6aafddd356d1788Brian * Functions for specifying the post-transformation vertex layout. 30898d68a3762f84f0d435cda2f6aafddd356d1788Brian * 31898d68a3762f84f0d435cda2f6aafddd356d1788Brian * Author: 32898d68a3762f84f0d435cda2f6aafddd356d1788Brian * Brian Paul 33898d68a3762f84f0d435cda2f6aafddd356d1788Brian * Keith Whitwell 34898d68a3762f84f0d435cda2f6aafddd356d1788Brian */ 35898d68a3762f84f0d435cda2f6aafddd356d1788Brian 36898d68a3762f84f0d435cda2f6aafddd356d1788Brian 376acd63a4980951727939c0dd545a0324965b3834José Fonseca#include "draw/draw_private.h" 386acd63a4980951727939c0dd545a0324965b3834José Fonseca#include "draw/draw_vertex.h" 39898d68a3762f84f0d435cda2f6aafddd356d1788Brian 40898d68a3762f84f0d435cda2f6aafddd356d1788Brian 41898d68a3762f84f0d435cda2f6aafddd356d1788Brian/** 42898d68a3762f84f0d435cda2f6aafddd356d1788Brian * Compute the size of a vertex, in dwords/floats, to update the 43898d68a3762f84f0d435cda2f6aafddd356d1788Brian * vinfo->size field. 44898d68a3762f84f0d435cda2f6aafddd356d1788Brian */ 45898d68a3762f84f0d435cda2f6aafddd356d1788Brianvoid 46898d68a3762f84f0d435cda2f6aafddd356d1788Briandraw_compute_vertex_size(struct vertex_info *vinfo) 47898d68a3762f84f0d435cda2f6aafddd356d1788Brian{ 48898d68a3762f84f0d435cda2f6aafddd356d1788Brian uint i; 49898d68a3762f84f0d435cda2f6aafddd356d1788Brian 50898d68a3762f84f0d435cda2f6aafddd356d1788Brian vinfo->size = 0; 51898d68a3762f84f0d435cda2f6aafddd356d1788Brian for (i = 0; i < vinfo->num_attribs; i++) { 5253d4706c6c0922160f310834daaec5718ff1c511Keith Whitwell switch (vinfo->attrib[i].emit) { 532549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian case EMIT_OMIT: 54898d68a3762f84f0d435cda2f6aafddd356d1788Brian break; 552549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian case EMIT_4UB: 56898d68a3762f84f0d435cda2f6aafddd356d1788Brian /* fall-through */ 572549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian case EMIT_1F_PSIZE: 58f1fb69a6e52260193ec16a9820a66e3e4bb03eddBrian /* fall-through */ 592549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian case EMIT_1F: 60898d68a3762f84f0d435cda2f6aafddd356d1788Brian vinfo->size += 1; 61898d68a3762f84f0d435cda2f6aafddd356d1788Brian break; 622549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian case EMIT_2F: 63898d68a3762f84f0d435cda2f6aafddd356d1788Brian vinfo->size += 2; 64898d68a3762f84f0d435cda2f6aafddd356d1788Brian break; 652549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian case EMIT_3F: 66898d68a3762f84f0d435cda2f6aafddd356d1788Brian vinfo->size += 3; 67898d68a3762f84f0d435cda2f6aafddd356d1788Brian break; 682549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian case EMIT_4F: 69898d68a3762f84f0d435cda2f6aafddd356d1788Brian vinfo->size += 4; 70898d68a3762f84f0d435cda2f6aafddd356d1788Brian break; 71898d68a3762f84f0d435cda2f6aafddd356d1788Brian default: 72898d68a3762f84f0d435cda2f6aafddd356d1788Brian assert(0); 73898d68a3762f84f0d435cda2f6aafddd356d1788Brian } 74898d68a3762f84f0d435cda2f6aafddd356d1788Brian } 75898d68a3762f84f0d435cda2f6aafddd356d1788Brian} 7668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell 7768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell 7868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwellvoid 7968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwelldraw_dump_emitted_vertex(const struct vertex_info *vinfo, const uint8_t *data) 8068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell{ 8168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell unsigned i, j; 8268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell 8368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell for (i = 0; i < vinfo->num_attribs; i++) { 8453d4706c6c0922160f310834daaec5718ff1c511Keith Whitwell j = vinfo->attrib[i].src_index; 8553d4706c6c0922160f310834daaec5718ff1c511Keith Whitwell switch (vinfo->attrib[i].emit) { 8668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_OMIT: 8768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_OMIT:"); 8868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 8968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_1F: 9068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_1F:\t"); 9168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 9268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 9368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_1F_PSIZE: 9468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_1F_PSIZE:\t"); 9568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 9668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 9768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_2F: 9868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_2F:\t"); 9968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 10068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 10168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 10268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_3F: 10368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_3F:\t"); 10468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 10568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 10668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 10768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell data += sizeof(float); 10868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 10968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_4F: 11068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_4F:\t"); 11168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 11268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 11368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 11468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 11568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 11668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_4UB: 11768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_4UB:\t"); 11868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%u ", *data++); 11968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%u ", *data++); 12068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%u ", *data++); 12168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%u ", *data++); 12268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 12368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell default: 12468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell assert(0); 12568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell } 12668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("\n"); 12768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell } 12868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("\n"); 12968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell} 130