radeon_maos_verts.c revision 5df82c82bd53db90eb72c5aad4dd20cf6f1116b1
15df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* $XFree86$ */ 25df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/************************************************************************** 35df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 45df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulCopyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and 55df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul Tungsten Graphics Inc., Austin, Texas. 65df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 75df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulAll Rights Reserved. 85df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 95df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulPermission is hereby granted, free of charge, to any person obtaining 105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paula copy of this software and associated documentation files (the 115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul"Software"), to deal in the Software without restriction, including 125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulwithout limitation the rights to use, copy, modify, merge, publish, 135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Pauldistribute, sublicense, and/or sell copies of the Software, and to 145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulpermit persons to whom the Software is furnished to do so, subject to 155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulthe following conditions: 165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulThe above copyright notice and this permission notice (including the 185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulnext paragraph) shall be included in all copies or substantial 195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulportions of the Software. 205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul**************************************************************************/ 305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* 325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Authors: 335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Keith Whitwell <keith@tungstengraphics.com> 345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "glheader.h" 375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "imports.h" 385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "mtypes.h" 395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "array_cache/acache.h" 415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/tnl.h" 425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/t_pipeline.h" 435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/t_imm_debug.h" 445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_context.h" 465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_state.h" 475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_ioctl.h" 485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_tex.h" 495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_tcl.h" 505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_swtcl.h" 515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos.h" 525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_TCL_MAX_SETUP 13 555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulunion emit_union { float f; GLuint ui; radeon_color_t specular; }; 575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic struct { 595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul void (*emit)( GLcontext *, GLuint, GLuint, void * ); 605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint vertex_size; 615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint vertex_format; 625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} setup_tab[RADEON_TCL_MAX_SETUP]; 635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_W (IND & RADEON_CP_VC_FRMT_W0) 655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_RGBA (IND & RADEON_CP_VC_FRMT_PKCOLOR) 665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_SPEC (IND & RADEON_CP_VC_FRMT_PKSPEC) 675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_FOG (IND & RADEON_CP_VC_FRMT_PKSPEC) 685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX0 (IND & RADEON_CP_VC_FRMT_ST0) 695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX1 (IND & RADEON_CP_VC_FRMT_ST1) 705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_PTEX (IND & RADEON_CP_VC_FRMT_Q0) 715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_NORM (IND & RADEON_CP_VC_FRMT_N0) 725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX2 0 745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_TEX3 0 755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GET_TEXSOURCE(n) n 775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GET_UBYTE_COLOR_STORE() &RADEON_CONTEXT(ctx)->UbyteColor 785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GET_UBYTE_SPEC_COLOR_STORE() &RADEON_CONTEXT(ctx)->UbyteSecondaryColor 795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IMPORT_FLOAT_COLORS radeon_import_float_colors 815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IMPORT_FLOAT_SPEC_COLORS radeon_import_float_spec_colors 825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/*********************************************************************** 845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Generate vertex emit functions * 855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ***********************************************************************/ 865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Defined in order of increasing vertex size: 895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 0 915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR) 945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba 955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 1 985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_n 1025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 2 1055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0) 1095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st 1105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 3 1135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_n 1185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 4 1215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_st_n 1265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 5 1295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1) 1345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st_st 1355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 6 1385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_st_n 1445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 7 1475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKSPEC| \ 1515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1) 1535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_spec_st_st 1545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 8 1575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1| \ 1615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_st_st_n 1635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 9 1665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKSPEC| \ 1705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1| \ 1725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 1735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgpa_spec_st_st_n 1745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 10 1775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q0) 1825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_stq 1835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 11 1865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 1895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1| \ 1905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q1| \ 1915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 1925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q0) 1935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_rgba_stq_stq 1945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 1955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IDX 12 1975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define IND (RADEON_CP_VC_FRMT_XY| \ 1985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Z| \ 1995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_W0| \ 2005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKCOLOR| \ 2015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_PKSPEC| \ 2025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST0| \ 2035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q0| \ 2045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_ST1| \ 2055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_Q1| \ 2065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_CP_VC_FRMT_N0) 2075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) x##_w_rgpa_spec_stq_stq_n 2085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_maos_vbtmp.h" 2095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/*********************************************************************** 2155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Initialization 2165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ***********************************************************************/ 2175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic void init_tcl_verts( void ) 2205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 2215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba(); 2225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_n(); 2235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_n(); 2245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_st(); 2255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_st_n(); 2265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_st_st(); 2275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_st_n(); 2285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_spec_st_st(); 2295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_st_st_n(); 2305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgpa_spec_st_st_n(); 2315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_stq(); 2325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_rgba_stq_stq(); 2335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_w_rgpa_spec_stq_stq_n(); 2345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 2355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulvoid radeonEmitArrays( GLcontext *ctx, GLuint inputs ) 2385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 2395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonContextPtr rmesa = RADEON_CONTEXT(ctx); 2405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; 2415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint req = 0; 2425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul GLuint vtx = (rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] & 2435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ~(RADEON_TCL_VTX_Q0|RADEON_TCL_VTX_Q1)); 2445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul int i; 2455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul static int firsttime = 1; 2465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (firsttime) { 2485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul init_tcl_verts(); 2495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul firsttime = 0; 2505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (1) { 2535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_Z; 2545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->ObjPtr->size == 4) { 2555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_W0; 2565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (inputs & VERT_BIT_NORMAL) { 2605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_N0; 2615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (inputs & VERT_BIT_COLOR0) { 2645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_PKCOLOR; 2655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (inputs & VERT_BIT_COLOR1) { 2685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_PKSPEC; 2695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (inputs & VERT_BIT_TEX0) { 2725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_ST0; 2735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->TexCoordPtr[0]->size == 4) { 2755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_Q0; 2765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul vtx |= RADEON_TCL_VTX_Q0; 2775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (inputs & VERT_BIT_TEX1) { 2815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_ST1; 2825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (VB->TexCoordPtr[1]->size == 4) { 2845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul req |= RADEON_CP_VC_FRMT_Q1; 2855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul vtx |= RADEON_TCL_VTX_Q1; 2865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (vtx != rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT]) { 2905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_STATECHANGE( rmesa, tcl ); 2915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] = vtx; 2925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul for (i = 0 ; i < RADEON_TCL_MAX_SETUP ; i++) 2955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if ((setup_tab[i].vertex_format & req) == req) 2965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul break; 2975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (rmesa->tcl.vertex_format == setup_tab[i].vertex_format && 2995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.indexed_verts.buf) 3005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul return; 3015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (rmesa->tcl.indexed_verts.buf) 3035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonReleaseArrays( ctx, ~0 ); 3045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonAllocDmaRegionVerts( rmesa, 3065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &rmesa->tcl.indexed_verts, 3075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul VB->Count, 3085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[i].vertex_size * 4, 3095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 4); 3105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul setup_tab[i].emit( ctx, 0, VB->Count, 3125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.indexed_verts.address + 3135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.indexed_verts.start ); 3145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.vertex_format = setup_tab[i].vertex_format; 3165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.indexed_verts.aos_start = GET_START( &rmesa->tcl.indexed_verts ); 3175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.indexed_verts.aos_size = setup_tab[i].vertex_size; 3185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.indexed_verts.aos_stride = setup_tab[i].vertex_size; 3195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.aos_components[0] = &rmesa->tcl.indexed_verts; 3215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul rmesa->tcl.nr_aos_components = 1; 3225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 3235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulvoid radeonReleaseArrays( GLcontext *ctx, GLuint newinputs ) 3275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 3285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonContextPtr rmesa = RADEON_CONTEXT( ctx ); 3295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (RADEON_DEBUG & DEBUG_VERTS) 3315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul _tnl_print_vert_flags( __FUNCTION__, newinputs ); 3325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul if (newinputs) 3345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonReleaseDmaRegion( rmesa, &rmesa->tcl.indexed_verts, __FUNCTION__ ); 3355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 336