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; 5184a8347b9f6ef0c1b2519e9bd5fef2ce3c85afb7Jakob Bornecrantz for (i = 0; i < vinfo->num_attribs; i++) 5284a8347b9f6ef0c1b2519e9bd5fef2ce3c85afb7Jakob Bornecrantz vinfo->size += draw_translate_vinfo_size(vinfo->attrib[i].emit); 5384a8347b9f6ef0c1b2519e9bd5fef2ce3c85afb7Jakob Bornecrantz 5484a8347b9f6ef0c1b2519e9bd5fef2ce3c85afb7Jakob Bornecrantz assert(vinfo->size % 4 == 0); 5584a8347b9f6ef0c1b2519e9bd5fef2ce3c85afb7Jakob Bornecrantz /* in dwords */ 5684a8347b9f6ef0c1b2519e9bd5fef2ce3c85afb7Jakob Bornecrantz vinfo->size /= 4; 57898d68a3762f84f0d435cda2f6aafddd356d1788Brian} 5868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell 5968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell 6068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwellvoid 6168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwelldraw_dump_emitted_vertex(const struct vertex_info *vinfo, const uint8_t *data) 6268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell{ 63cacdc42e36d27d49b6deb0f1ea57f564ad31c88fMarek Olšák unsigned i; 6468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell 6568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell for (i = 0; i < vinfo->num_attribs; i++) { 6653d4706c6c0922160f310834daaec5718ff1c511Keith Whitwell switch (vinfo->attrib[i].emit) { 6768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_OMIT: 6868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_OMIT:"); 6968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 7068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_1F: 7168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_1F:\t"); 7268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 7368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 7468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_1F_PSIZE: 7568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_1F_PSIZE:\t"); 7668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 7768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 7868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_2F: 7968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_2F:\t"); 8068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 8168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 8268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 8368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_3F: 8468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_3F:\t"); 8568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 8668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 8768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 8868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell data += sizeof(float); 8968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 9068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_4F: 9168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_4F:\t"); 9268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 9368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 9468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 9568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%f ", *(float *)data); data += sizeof(float); 9668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 9768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell case EMIT_4UB: 9868a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("EMIT_4UB:\t"); 9968a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%u ", *data++); 10068a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%u ", *data++); 10168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%u ", *data++); 10268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("%u ", *data++); 10368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell break; 104fe306e7ea5e789adc955653d9be8cd7f8af47264Jakob Bornecrantz case EMIT_4UB_BGRA: 105fe306e7ea5e789adc955653d9be8cd7f8af47264Jakob Bornecrantz debug_printf("EMIT_4UB_BGRA:\t"); 106fe306e7ea5e789adc955653d9be8cd7f8af47264Jakob Bornecrantz debug_printf("%u ", *data++); 107fe306e7ea5e789adc955653d9be8cd7f8af47264Jakob Bornecrantz debug_printf("%u ", *data++); 108fe306e7ea5e789adc955653d9be8cd7f8af47264Jakob Bornecrantz debug_printf("%u ", *data++); 109fe306e7ea5e789adc955653d9be8cd7f8af47264Jakob Bornecrantz debug_printf("%u ", *data++); 110fe306e7ea5e789adc955653d9be8cd7f8af47264Jakob Bornecrantz break; 11168a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell default: 11268a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell assert(0); 11368a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell } 11468a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("\n"); 11568a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell } 11668a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell debug_printf("\n"); 11768a7cb21fa14eac9e38bf398623739a892cc0d52Keith Whitwell} 118