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