draw_vertex.h revision 898d68a3762f84f0d435cda2f6aafddd356d1788
1690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul/**************************************************************************
2690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul *
3690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
4690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * All Rights Reserved.
5690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul *
6690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * Permission is hereby granted, free of charge, to any person obtaining a
7690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * copy of this software and associated documentation files (the
8690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * "Software"), to deal in the Software without restriction, including
9690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * without limitation the rights to use, copy, modify, merge, publish,
10690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * distribute, sub license, and/or sell copies of the Software, and to
11690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * permit persons to whom the Software is furnished to do so, subject to
12690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * the following conditions:
13690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul *
14690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * The above copyright notice and this permission notice (including the
15690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * next paragraph) shall be included in all copies or substantial portions
16690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * of the Software.
17690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul *
18690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul *
26690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul **************************************************************************/
27690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
28690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul/* Author:
29690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul *    Brian Paul
30690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul */
31690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
32690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
33690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#ifndef DRAW_VERTEX_H
34690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define DRAW_VERTEX_H
35690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
36c89502bb4e6d80182e4977ab084639850e1eba68Keith Whitwell#include "pipe/tgsi/exec/tgsi_attribs.h"
37690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
38690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
39690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define MAX_VERT_ATTRIBS 12  /* OK? */
40690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
41690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define FORMAT_OMIT 0
42690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define FORMAT_1F   1
43690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define FORMAT_2F   2
44690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define FORMAT_3F   3
45690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define FORMAT_4F   4
46690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define FORMAT_4F_VIEWPORT   4
47690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define FORMAT_4UB  5
48690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
49690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
50942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paulenum interp_mode {
51942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul   INTERP_NONE,      /**< never interpolate vertex header info */
52942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul   INTERP_CONSTANT,
53942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul   INTERP_LINEAR,
54942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul   INTERP_PERSPECTIVE
55942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul};
56942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul
57942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul
58942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul
59690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paulstruct vertex_info
60690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul{
61690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul   uint num_attribs;
62d8b16d416de95daa4f0ede9b839bdbf0fa6bf1b1Brian Paul   uint hwfmt[4];      /**< hardware format info for this format */
63690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul   uint attr_mask;     /**< mask of VF_ATTR_ bits */
64690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul   uint slot_to_attrib[MAX_VERT_ATTRIBS];
65d8b16d416de95daa4f0ede9b839bdbf0fa6bf1b1Brian Paul   uint attrib_to_slot[TGSI_ATTRIB_MAX];
66690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul   uint interp_mode[MAX_VERT_ATTRIBS];
67690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul   uint format[MAX_VERT_ATTRIBS];   /**< FORMAT_x */
68690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul   uint size;          /**< total vertex size in dwords */
69690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul};
70690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
71690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
72690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul
73898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul/**
74898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul * Add another attribute to the given vertex_info object.
75898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul * \return slot in which the attribute was added
76898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul */
77898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paulstatic INLINE uint
78898d68a3762f84f0d435cda2f6aafddd356d1788Brian Pauldraw_emit_vertex_attr(struct vertex_info *vinfo, uint vfAttr, uint format,
79898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul                      uint interp)
80898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul{
81898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul   const uint n = vinfo->num_attribs;
82898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul   vinfo->attr_mask |= (1 << vfAttr);
83898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul   vinfo->slot_to_attrib[n] = vfAttr;
84898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul   vinfo->format[n] = format;
85898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul   vinfo->interp_mode[n] = interp;
86898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul   vinfo->num_attribs++;
87898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul   return n;
88898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul}
89898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul
90898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul
91898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul
92874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwellstruct draw_context;
93874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell
94874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwellextern int draw_vertex_cache_check_space( struct draw_context *draw,
95874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell					  unsigned nr_verts );
96874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell
97874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwellextern void draw_vertex_cache_validate( struct draw_context *draw );
98874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwellextern void draw_vertex_cache_invalidate( struct draw_context *draw );
99874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwellextern void draw_vertex_cache_unreference( struct draw_context *draw );
100874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell
101874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwellextern void draw_vertex_shader_queue_flush( struct draw_context *draw );
102874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell
103874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwellstruct tgsi_exec_machine;
104874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell
105874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwellextern void draw_vertex_fetch( struct draw_context *draw,
106874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell			       struct tgsi_exec_machine *machine,
107874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell			       const unsigned *elts,
108874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell			       unsigned count );
109874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell
110874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell
111690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#endif /* DRAW_VERTEX_H */
112