draw_vertex.h revision e9c6c31651a0c1884633168adfd3ea6797fbdc60
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 28e9c6c31651a0c1884633168adfd3ea6797fbdc60Brian Paul/** 29e9c6c31651a0c1884633168adfd3ea6797fbdc60Brian Paul * Post-transform vertex format info. The vertex_info struct is used by 30e9c6c31651a0c1884633168adfd3ea6797fbdc60Brian Paul * the draw_vbuf code to emit hardware-specific vertex layouts into hw 31e9c6c31651a0c1884633168adfd3ea6797fbdc60Brian Paul * vertex buffers. 32e9c6c31651a0c1884633168adfd3ea6797fbdc60Brian Paul * 33e9c6c31651a0c1884633168adfd3ea6797fbdc60Brian Paul * Author: 34690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul * Brian Paul 35690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul */ 36690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 37690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 38690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#ifndef DRAW_VERTEX_H 39690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#define DRAW_VERTEX_H 40690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 41690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 42c344bda34dcbc1731573edc94de0c20549557adfBrian Paul#include "pipe/p_state.h" 43c344bda34dcbc1731573edc94de0c20549557adfBrian Paul 44c344bda34dcbc1731573edc94de0c20549557adfBrian Paul 452e21058e3d2c484b282cbc0bb5e7169b9a8d4fc7Brian Paul/** 462549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul * Vertex attribute emit modes 472e21058e3d2c484b282cbc0bb5e7169b9a8d4fc7Brian Paul */ 482549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paulenum attrib_emit { 492549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul EMIT_OMIT, /**< don't emit the attribute */ 502549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul EMIT_ALL, /**< emit whole post-xform vertex, w/ header */ 512549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul EMIT_1F, 522549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul EMIT_1F_PSIZE, /**< insert constant point size */ 532549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul EMIT_2F, 542549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul EMIT_3F, 552549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul EMIT_4F, 562549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul EMIT_4UB /**< XXX may need variations for RGBA vs BGRA, etc */ 57a70c5e37f1c2e43738469e4799ad2b9e7c604782Zack Rusin}; 58690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 59690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 602e21058e3d2c484b282cbc0bb5e7169b9a8d4fc7Brian Paul/** 612e21058e3d2c484b282cbc0bb5e7169b9a8d4fc7Brian Paul * Attribute interpolation mode 622e21058e3d2c484b282cbc0bb5e7169b9a8d4fc7Brian Paul */ 63a70c5e37f1c2e43738469e4799ad2b9e7c604782Zack Rusinenum interp_mode { 64942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul INTERP_NONE, /**< never interpolate vertex header info */ 656000dcc973cdc1bd61621b432aed27d21059ae5dBrian Paul INTERP_POS, /**< special case for frag position */ 66942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul INTERP_CONSTANT, 67942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul INTERP_LINEAR, 68942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul INTERP_PERSPECTIVE 69a70c5e37f1c2e43738469e4799ad2b9e7c604782Zack Rusin}; 70942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul 71942b9bc5bc13d959baa86779a7c669cf96659b9aBrian Paul 72086734502a614e7778533018846ee66a66df9821Brian Paul/** 73cd3643698eafa0869a8317b002e5b066de0172e7Brian Paul * Information about hardware/rasterization vertex layout. 74086734502a614e7778533018846ee66a66df9821Brian Paul */ 75690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paulstruct vertex_info 76690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul{ 77690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul uint num_attribs; 78d8b16d416de95daa4f0ede9b839bdbf0fa6bf1b1Brian Paul uint hwfmt[4]; /**< hardware format info for this format */ 79c344bda34dcbc1731573edc94de0c20549557adfBrian Paul enum interp_mode interp_mode[PIPE_MAX_SHADER_INPUTS]; 80c344bda34dcbc1731573edc94de0c20549557adfBrian Paul enum attrib_emit emit[PIPE_MAX_SHADER_INPUTS]; /**< EMIT_x */ 81c344bda34dcbc1731573edc94de0c20549557adfBrian Paul uint src_index[PIPE_MAX_SHADER_INPUTS]; /**< map to post-xform attribs */ 82690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul uint size; /**< total vertex size in dwords */ 83690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul}; 84690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 85690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 86690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul 87898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul/** 88898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul * Add another attribute to the given vertex_info object. 89382b86e90f69fa0493fae3c7e5c9cd482984af8fBrian Paul * \param src_index indicates which post-transformed vertex attrib slot 90382b86e90f69fa0493fae3c7e5c9cd482984af8fBrian Paul * corresponds to this attribute. 91898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul * \return slot in which the attribute was added 92898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul */ 93898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paulstatic INLINE uint 94674d0130693f827ae9ea8e902a38c46d64444384Brian Pauldraw_emit_vertex_attr(struct vertex_info *vinfo, 952549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul enum attrib_emit emit, enum interp_mode interp, 96382b86e90f69fa0493fae3c7e5c9cd482984af8fBrian Paul uint src_index) 97898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul{ 98898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul const uint n = vinfo->num_attribs; 99c344bda34dcbc1731573edc94de0c20549557adfBrian Paul assert(n < PIPE_MAX_SHADER_INPUTS); 1002549d79ae5342a2b97c06e3b0db9da6eb7821d2eBrian Paul vinfo->emit[n] = emit; 101898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul vinfo->interp_mode[n] = interp; 102382b86e90f69fa0493fae3c7e5c9cd482984af8fBrian Paul vinfo->src_index[n] = src_index; 103898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul vinfo->num_attribs++; 104898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul return n; 105898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul} 106898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul 107898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul 1082e21058e3d2c484b282cbc0bb5e7169b9a8d4fc7Brian Paulextern void draw_compute_vertex_size(struct vertex_info *vinfo); 109898d68a3762f84f0d435cda2f6aafddd356d1788Brian Paul 110874b9265601fcc05b1e32e2be029f3ac6a966c97Keith Whitwell 111690a9de40b20092ae9027dc52d7b26a48995bbffBrian Paul#endif /* DRAW_VERTEX_H */ 112