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