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