r200_state_init.c revision f8c2beccd4847836dec18849d2d58f3220ff81eb
1adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* 2adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCopyright (C) The Weather Channel, Inc. 2002. All Rights Reserved. 3adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 4adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThe Weather Channel (TM) funded Tungsten Graphics to develop the 5adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellinitial release of the Radeon 8500 driver under the XFree86 license. 6adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThis notice must be preserved. 7adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 8adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellPermission is hereby granted, free of charge, to any person obtaining 9adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwella copy of this software and associated documentation files (the 10adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell"Software"), to deal in the Software without restriction, including 11adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellwithout limitation the rights to use, copy, modify, merge, publish, 12adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelldistribute, sublicense, and/or sell copies of the Software, and to 13adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellpermit persons to whom the Software is furnished to do so, subject to 14adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellthe following conditions: 15adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 16adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThe above copyright notice and this permission notice (including the 17adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellnext paragraph) shall be included in all copies or substantial 18adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellportions of the Software. 19adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 20adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 23adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 24adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell*/ 28adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 29adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* 30adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * Authors: 31adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * Keith Whitwell <keith@tungstengraphics.com> 32adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */ 33adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 34ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/glheader.h" 35ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/imports.h" 36ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/enums.h" 37ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/colormac.h" 38ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/api_arrayelt.h" 39adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 40adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "swrast/swrast.h" 4180c88304fc9d09531b2530b74973821e47b46753Keith Whitwell#include "vbo/vbo.h" 42adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "tnl/tnl.h" 43adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "tnl/t_pipeline.h" 44adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "swrast_setup/swrast_setup.h" 45adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 468cb16e6daff40bbfd7b63a43da72862226a4a164Dave Airlie#include "radeon_common.h" 4761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie#include "radeon_mipmap_tree.h" 48adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_context.h" 49adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_ioctl.h" 50adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_state.h" 51adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_tcl.h" 52adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_tex.h" 53adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_swtcl.h" 54adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 55273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane#include "xmlpool.h" 56273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane 57ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie/* New (1.3) state mechanism. 3 commands (packet, scalar, vector) in 58ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie * 1.3 cmdbuffers allow all previous state to be updated as well as 59ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie * the tcl scalar and vector areas. 60ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie */ 61ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airliestatic struct { 62ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie int start; 63ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie int len; 64ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie const char *name; 65ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie} packet[RADEON_MAX_STATE_PACKETS] = { 66ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_MISC, 7, "RADEON_PP_MISC"}, 67ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_CNTL, 3, "RADEON_PP_CNTL"}, 68ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_RB3D_COLORPITCH, 1, "RADEON_RB3D_COLORPITCH"}, 69ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_RE_LINE_PATTERN, 2, "RADEON_RE_LINE_PATTERN"}, 70ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_SE_LINE_WIDTH, 1, "RADEON_SE_LINE_WIDTH"}, 71ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_LUM_MATRIX, 1, "RADEON_PP_LUM_MATRIX"}, 72ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_ROT_MATRIX_0, 2, "RADEON_PP_ROT_MATRIX_0"}, 73ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_RB3D_STENCILREFMASK, 3, "RADEON_RB3D_STENCILREFMASK"}, 74ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_SE_VPORT_XSCALE, 6, "RADEON_SE_VPORT_XSCALE"}, 75ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_SE_CNTL, 2, "RADEON_SE_CNTL"}, 76ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_SE_CNTL_STATUS, 1, "RADEON_SE_CNTL_STATUS"}, 77ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_RE_MISC, 1, "RADEON_RE_MISC"}, 78ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_TXFILTER_0, 6, "RADEON_PP_TXFILTER_0"}, 79ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_BORDER_COLOR_0, 1, "RADEON_PP_BORDER_COLOR_0"}, 80ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_TXFILTER_1, 6, "RADEON_PP_TXFILTER_1"}, 81ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_BORDER_COLOR_1, 1, "RADEON_PP_BORDER_COLOR_1"}, 82ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_TXFILTER_2, 6, "RADEON_PP_TXFILTER_2"}, 83ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_BORDER_COLOR_2, 1, "RADEON_PP_BORDER_COLOR_2"}, 84ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_SE_ZBIAS_FACTOR, 2, "RADEON_SE_ZBIAS_FACTOR"}, 85ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_SE_TCL_OUTPUT_VTX_FMT, 11, "RADEON_SE_TCL_OUTPUT_VTX_FMT"}, 86ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED, 17, 87ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie "RADEON_SE_TCL_MATERIAL_EMMISSIVE_RED"}, 88ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_0, 4, "R200_PP_TXCBLEND_0"}, 89ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_1, 4, "R200_PP_TXCBLEND_1"}, 90ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_2, 4, "R200_PP_TXCBLEND_2"}, 91ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_3, 4, "R200_PP_TXCBLEND_3"}, 92ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_4, 4, "R200_PP_TXCBLEND_4"}, 93ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_5, 4, "R200_PP_TXCBLEND_5"}, 94ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_6, 4, "R200_PP_TXCBLEND_6"}, 95ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_7, 4, "R200_PP_TXCBLEND_7"}, 96ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_TCL_LIGHT_MODEL_CTL_0, 6, "R200_SE_TCL_LIGHT_MODEL_CTL_0"}, 97ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TFACTOR_0, 6, "R200_PP_TFACTOR_0"}, 98ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_VTX_FMT_0, 4, "R200_SE_VTX_FMT_0"}, 99ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_VAP_CNTL, 1, "R200_SE_VAP_CNTL"}, 100ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_TCL_MATRIX_SEL_0, 5, "R200_SE_TCL_MATRIX_SEL_0"}, 101ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_TCL_TEX_PROC_CTL_2, 5, "R200_SE_TCL_TEX_PROC_CTL_2"}, 102ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_TCL_UCP_VERT_BLEND_CTL, 1, "R200_SE_TCL_UCP_VERT_BLEND_CTL"}, 103ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_0, 6, "R200_PP_TXFILTER_0"}, 104ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_1, 6, "R200_PP_TXFILTER_1"}, 105ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_2, 6, "R200_PP_TXFILTER_2"}, 106ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_3, 6, "R200_PP_TXFILTER_3"}, 107ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_4, 6, "R200_PP_TXFILTER_4"}, 108ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_5, 6, "R200_PP_TXFILTER_5"}, 109ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXOFFSET_0, 1, "R200_PP_TXOFFSET_0"}, 110ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXOFFSET_1, 1, "R200_PP_TXOFFSET_1"}, 111ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXOFFSET_2, 1, "R200_PP_TXOFFSET_2"}, 112ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXOFFSET_3, 1, "R200_PP_TXOFFSET_3"}, 113ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXOFFSET_4, 1, "R200_PP_TXOFFSET_4"}, 114ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXOFFSET_5, 1, "R200_PP_TXOFFSET_5"}, 115ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_VTE_CNTL, 1, "R200_SE_VTE_CNTL"}, 116ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_TCL_OUTPUT_VTX_COMP_SEL, 1, 117ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie "R200_SE_TCL_OUTPUT_VTX_COMP_SEL"}, 118ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TAM_DEBUG3, 1, "R200_PP_TAM_DEBUG3"}, 119ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CNTL_X, 1, "R200_PP_CNTL_X"}, 120ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_RB3D_DEPTHXY_OFFSET, 1, "R200_RB3D_DEPTHXY_OFFSET"}, 121ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_RE_AUX_SCISSOR_CNTL, 1, "R200_RE_AUX_SCISSOR_CNTL"}, 122ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_RE_SCISSOR_TL_0, 2, "R200_RE_SCISSOR_TL_0"}, 123ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_RE_SCISSOR_TL_1, 2, "R200_RE_SCISSOR_TL_1"}, 124ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_RE_SCISSOR_TL_2, 2, "R200_RE_SCISSOR_TL_2"}, 125ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_VAP_CNTL_STATUS, 1, "R200_SE_VAP_CNTL_STATUS"}, 126ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_VTX_STATE_CNTL, 1, "R200_SE_VTX_STATE_CNTL"}, 127ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_RE_POINTSIZE, 1, "R200_RE_POINTSIZE"}, 128ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0, 4, 129ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie "R200_SE_TCL_INPUT_VTX_VECTOR_ADDR_0"}, 130ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_FACES_0, 1, "R200_PP_CUBIC_FACES_0"}, /* 61 */ 131ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_OFFSET_F1_0, 5, "R200_PP_CUBIC_OFFSET_F1_0"}, /* 62 */ 132ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_FACES_1, 1, "R200_PP_CUBIC_FACES_1"}, 133ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_OFFSET_F1_1, 5, "R200_PP_CUBIC_OFFSET_F1_1"}, 134ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_FACES_2, 1, "R200_PP_CUBIC_FACES_2"}, 135ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_OFFSET_F1_2, 5, "R200_PP_CUBIC_OFFSET_F1_2"}, 136ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_FACES_3, 1, "R200_PP_CUBIC_FACES_3"}, 137ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_OFFSET_F1_3, 5, "R200_PP_CUBIC_OFFSET_F1_3"}, 138ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_FACES_4, 1, "R200_PP_CUBIC_FACES_4"}, 139ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_OFFSET_F1_4, 5, "R200_PP_CUBIC_OFFSET_F1_4"}, 140ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_FACES_5, 1, "R200_PP_CUBIC_FACES_5"}, 141ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_CUBIC_OFFSET_F1_5, 5, "R200_PP_CUBIC_OFFSET_F1_5"}, 142ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_TEX_SIZE_0, 2, "RADEON_PP_TEX_SIZE_0"}, 143ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_TEX_SIZE_1, 2, "RADEON_PP_TEX_SIZE_1"}, 144ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_TEX_SIZE_2, 2, "RADEON_PP_TEX_SIZE_2"}, 145ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_RB3D_BLENDCOLOR, 3, "R200_RB3D_BLENDCOLOR"}, 146ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_SE_TCL_POINT_SPRITE_CNTL, 1, "R200_SE_TCL_POINT_SPRITE_CNTL"}, 147ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_CUBIC_FACES_0, 1, "RADEON_PP_CUBIC_FACES_0"}, 148ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_CUBIC_OFFSET_T0_0, 5, "RADEON_PP_CUBIC_OFFSET_T0_0"}, 149ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_CUBIC_FACES_1, 1, "RADEON_PP_CUBIC_FACES_1"}, 150ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_CUBIC_OFFSET_T1_0, 5, "RADEON_PP_CUBIC_OFFSET_T1_0"}, 151ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_CUBIC_FACES_2, 1, "RADEON_PP_CUBIC_FACES_2"}, 152ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {RADEON_PP_CUBIC_OFFSET_T2_0, 5, "RADEON_PP_CUBIC_OFFSET_T2_0"}, 153ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TRI_PERF, 2, "R200_PP_TRI_PERF"}, 154ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_8, 32, "R200_PP_AFS_0"}, /* 85 */ 155ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXCBLEND_0, 32, "R200_PP_AFS_1"}, 156ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TFACTOR_0, 8, "R200_ATF_TFACTOR"}, 157ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_0, 8, "R200_PP_TXCTLALL_0"}, 158ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_1, 8, "R200_PP_TXCTLALL_1"}, 159ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_2, 8, "R200_PP_TXCTLALL_2"}, 160ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_3, 8, "R200_PP_TXCTLALL_3"}, 161ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_4, 8, "R200_PP_TXCTLALL_4"}, 162ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_PP_TXFILTER_5, 8, "R200_PP_TXCTLALL_5"}, 163ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie {R200_VAP_PVS_CNTL_1, 2, "R200_VAP_PVS_CNTL"}, 164ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie}; 165ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie 166adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* ============================================================= 167adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * State initialization 168adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */ 169adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 170adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid r200PrintDirty( r200ContextPtr rmesa, const char *msg ) 171adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{ 172b6e486906968d82c7b8a869d7ab51697a7cce80cDave Airlie struct radeon_state_atom *l; 173adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 174adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell fprintf(stderr, msg); 175adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell fprintf(stderr, ": "); 176adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1771090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie foreach(l, &rmesa->radeon.hw.atomlist) { 1781090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie if (l->dirty || rmesa->radeon.hw.all_dirty) 1790c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt fprintf(stderr, "%s, ", l->name); 180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } 181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 182adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell fprintf(stderr, "\n"); 183adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 184adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 185474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic int cmdpkt( r200ContextPtr rmesa, int id ) 186adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{ 187ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl drm_radeon_cmd_header_t h; 188474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 189474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (rmesa->radeon.radeonScreen->kernel_mm) { 190474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie return CP_PACKET0(packet[id].start, packet[id].len - 1); 191474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } else { 192474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie h.i = 0; 193474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie h.packet.cmd_type = RADEON_CMD_PACKET; 194474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie h.packet.packet_id = id; 195474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } 196adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell return h.i; 197adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 198adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 199adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdvec( int offset, int stride, int count ) 200adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{ 201ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl drm_radeon_cmd_header_t h; 202adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.i = 0; 203adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.vectors.cmd_type = RADEON_CMD_VECTORS; 204adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.vectors.offset = offset; 205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.vectors.stride = stride; 206adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.vectors.count = count; 207adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell return h.i; 208adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 209adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 21098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger/* warning: the count here is divided by 4 compared to other cmds 21198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger (so it doesn't exceed the char size)! */ 21298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheideggerstatic int cmdveclinear( int offset, int count ) 21398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{ 21498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger drm_radeon_cmd_header_t h; 21598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger h.i = 0; 21698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger h.veclinear.cmd_type = RADEON_CMD_VECLINEAR; 21798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger h.veclinear.addr_lo = offset & 0xff; 21898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger h.veclinear.addr_hi = (offset & 0xff00) >> 8; 21998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger h.veclinear.count = count; 22098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger return h.i; 22198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger} 22298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger 223adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl( int offset, int stride, int count ) 224adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{ 225ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl drm_radeon_cmd_header_t h; 226adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.i = 0; 227adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.scalars.cmd_type = RADEON_CMD_SCALARS; 228adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.scalars.offset = offset; 229adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.scalars.stride = stride; 230adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.scalars.count = count; 231adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell return h.i; 232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 233adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 234adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl2( int offset, int stride, int count ) 235adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{ 236ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl drm_radeon_cmd_header_t h; 237adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.i = 0; 238adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.scalars.cmd_type = RADEON_CMD_SCALARS2; 239adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.scalars.offset = offset - 0x100; 240adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.scalars.stride = stride; 241adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell h.scalars.count = count; 242adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell return h.i; 243adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 244adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 245adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CHECK( NM, FLAG ) \ 2464637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \ 247adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{ \ 24836603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger r200ContextPtr rmesa = R200_CONTEXT(ctx); \ 24936603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger (void) rmesa; \ 2500c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie return (FLAG) ? atom->cmd_size : 0; \ 251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 252adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_CHECK( NM, FLAG ) \ 2544637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \ 2554637235183b80963536f2364e4d50fcb894886ddDave Airlie{ \ 2564637235183b80963536f2364e4d50fcb894886ddDave Airlie r200ContextPtr rmesa = R200_CONTEXT(ctx); \ 2570c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie return (!rmesa->radeon.TclFallback && !ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size : 0; \ 25898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger} 25998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger 26098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define TCL_OR_VP_CHECK( NM, FLAG ) \ 2614637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \ 26298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{ \ 26398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger r200ContextPtr rmesa = R200_CONTEXT(ctx); \ 2640c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie return (!rmesa->radeon.TclFallback && (FLAG)) ? atom->cmd_size : 0; \ 265adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 266adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 26798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VP_CHECK( NM, FLAG ) \ 2684637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \ 2694637235183b80963536f2364e4d50fcb894886ddDave Airlie{ \ 2704637235183b80963536f2364e4d50fcb894886ddDave Airlie r200ContextPtr rmesa = R200_CONTEXT(ctx); \ 2714637235183b80963536f2364e4d50fcb894886ddDave Airlie (void) atom; \ 2720c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie return (!rmesa->radeon.TclFallback && ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size : 0; \ 27398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger} 274adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 275adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCHECK( always, GL_TRUE ) 276bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon SmirlCHECK( never, GL_FALSE ) 277adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCHECK( tex_any, ctx->Texture._EnabledUnits ) 278f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( tf, (ctx->Texture._EnabledUnits && !ctx->ATIFragmentShader._Enabled) ); 2794637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex_pair, (rmesa->state.texture.unit[atom->idx].unitneeded | rmesa->state.texture.unit[atom->idx & ~1].unitneeded) ) 2804637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex, rmesa->state.texture.unit[atom->idx].unitneeded ) 281f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( pix_zero, !ctx->ATIFragmentShader._Enabled ) 2824637235183b80963536f2364e4d50fcb894886ddDave Airlie CHECK( texenv, (rmesa->state.envneeded & (1 << (atom->idx)) && !ctx->ATIFragmentShader._Enabled) ) 283f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( afs_pass1, (ctx->ATIFragmentShader._Enabled && (ctx->ATIFragmentShader.Current->NumPasses > 1)) ) 284f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( afs, ctx->ATIFragmentShader._Enabled ) 2854637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex_cube, rmesa->state.texture.unit[atom->idx].unitneeded & TEXTURE_CUBE_BIT ) 286014bfda235e5315baf84b1d47329be167dd2ec7fRoland ScheideggerTCL_CHECK( tcl_fog, ctx->Fog.Enabled ) 287adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTCL_CHECK( tcl, GL_TRUE ) 2884637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_CHECK( tcl_tex, rmesa->state.texture.unit[atom->idx].unitneeded ) 289adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTCL_CHECK( tcl_lighting, ctx->Light.Enabled ) 2904637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_CHECK( tcl_light, ctx->Light.Enabled && ctx->Light.Light[atom->idx].Enabled ) 2914637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_OR_VP_CHECK( tcl_ucp, (ctx->Transform.ClipPlanesEnabled & (1 << (atom->idx))) ) 29298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerTCL_OR_VP_CHECK( tcl_or_vp, GL_TRUE ) 29398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vp, GL_TRUE ) 29498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vp_size, ctx->VertexProgram.Current->Base.NumNativeInstructions > 64 ) 29598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vpp_size, ctx->VertexProgram.Current->Base.NumNativeParameters > 96 ) 296adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 297474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_VEC(hdr, data) do { \ 298474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie drm_radeon_cmd_header_t h; \ 299474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie h.i = hdr; \ 300474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(RADEON_SE_TCL_STATE_FLUSH, 0)); \ 301474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(0); \ 302474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(R200_SE_TCL_VECTOR_INDX_REG, 0)); \ 303474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(h.vectors.offset | (h.vectors.stride << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT)); \ 304474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_VECTOR_DATA_REG, h.vectors.count - 1)); \ 305474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH_TABLE((data), h.vectors.count); \ 306474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } while(0) 307474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 308474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_VECLINEAR(hdr, data) do { \ 309474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie drm_radeon_cmd_header_t h; \ 310474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t _start = h.veclinear.addr_lo | (h.veclinear.addr_hi << 8); \ 311474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t _sz = h.veclinear.count * 4; \ 312474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie h.i = hdr; \ 313474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(RADEON_SE_TCL_STATE_FLUSH, 0)); \ 314474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(0); \ 315474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(R200_SE_TCL_VECTOR_INDX_REG, 0)); \ 316474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(_start | (1 << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT)); \ 317474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_VECTOR_DATA_REG, _sz - 1)); \ 318474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH_TABLE((data), _sz); \ 319474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } while(0) 320474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 321474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_SCL(hdr, data) do { \ 322474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie drm_radeon_cmd_header_t h; \ 323474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie h.i = hdr; \ 324474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(R200_SE_TCL_SCALAR_INDX_REG, 0)); \ 325474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH((h.scalars.offset) | (h.scalars.stride << RADEON_SCAL_INDX_DWORD_STRIDE_SHIFT)); \ 326474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_SCALAR_DATA_REG, h.scalars.count - 1)); \ 327474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH_TABLE((data), h.scalars.count); \ 328474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } while(0) 329474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 330474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie#define OUT_SCL2(hdr, data) do { \ 331474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie drm_radeon_cmd_header_t h; \ 332474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie h.i = hdr; \ 333474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(R200_SE_TCL_SCALAR_INDX_REG, 0)); \ 334474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH((h.scalars.offset + 0x100) | (h.scalars.stride << RADEON_SCAL_INDX_DWORD_STRIDE_SHIFT)); \ 335474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0_ONE(R200_SE_TCL_SCALAR_DATA_REG, h.scalars.count - 1)); \ 336474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH_TABLE((data), h.scalars.count); \ 337474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } while(0) 338474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 339474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void mtl_emit(GLcontext *ctx, struct radeon_state_atom *atom) 340474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{ 341474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 342474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BATCH_LOCALS(&r200->radeon); 343474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t dwords = atom->cmd_size; 344474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 345474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords); 346474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_VEC(atom->cmd[MTL_CMD_0], (atom->cmd+1)); 347474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_SCL2(atom->cmd[MTL_CMD_1], (atom->cmd + 18)); 348474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie END_BATCH(); 349474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie} 350474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 351474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void lit_emit(GLcontext *ctx, struct radeon_state_atom *atom) 352474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{ 353474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 354474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BATCH_LOCALS(&r200->radeon); 355474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t dwords = atom->cmd_size; 356474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 357474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords); 358474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_VEC(atom->cmd[LIT_CMD_0], atom->cmd+1); 359474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_VEC(atom->cmd[LIT_CMD_1], atom->cmd+LIT_CMD_1+1); 360474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie END_BATCH(); 361474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie} 362474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 363474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void ptp_emit(GLcontext *ctx, struct radeon_state_atom *atom) 364474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{ 365474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 366474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BATCH_LOCALS(&r200->radeon); 367474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t dwords = atom->cmd_size; 368474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 369474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords); 370474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_VEC(atom->cmd[PTP_CMD_0], atom->cmd+1); 371474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_VEC(atom->cmd[PTP_CMD_1], atom->cmd+PTP_CMD_1+1); 372474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie END_BATCH(); 373474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie} 374474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 375474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void veclinear_emit(GLcontext *ctx, struct radeon_state_atom *atom) 376474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{ 377474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 378474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BATCH_LOCALS(&r200->radeon); 379474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t dwords = atom->cmd_size; 380474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 381474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords); 382474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_VECLINEAR(atom->cmd[0], atom->cmd+1); 383474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie END_BATCH(); 384474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie} 385474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 386474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void scl_emit(GLcontext *ctx, struct radeon_state_atom *atom) 387474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{ 388474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 389474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BATCH_LOCALS(&r200->radeon); 390474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t dwords = atom->cmd_size; 391474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 392474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords); 393474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_SCL(atom->cmd[0], atom->cmd+1); 394474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie END_BATCH(); 395474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie} 396474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 397474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 398474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void vec_emit(GLcontext *ctx, struct radeon_state_atom *atom) 399474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{ 400474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 401474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BATCH_LOCALS(&r200->radeon); 402474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t dwords = atom->cmd_size; 403474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 404474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords); 405474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_VEC(atom->cmd[0], atom->cmd+1); 406474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie END_BATCH(); 407474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie} 408adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 409d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airliestatic void ctx_emit(GLcontext *ctx, struct radeon_state_atom *atom) 410ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie{ 411ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 412ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie BATCH_LOCALS(&r200->radeon); 413ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie struct radeon_renderbuffer *rrb; 414ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie uint32_t cbpitch; 415d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie uint32_t zbpitch; 416d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie uint32_t dwords = atom->cmd_size; 417ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie GLframebuffer *fb = r200->radeon.dri.drawable->driverPrivate; 418d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie 419d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie /* output the first 7 bytes of context */ 420ade3660942452985afa1bb67bbeab8fed734089dDave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords+2+2); 421d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH_TABLE(atom->cmd, 5); 422d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie 423d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie rrb = r200->radeon.state.depth.rrb; 424d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie if (!rrb) { 425474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(0); 426474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(0); 427d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie } else { 428d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie zbpitch = (rrb->pitch / rrb->cpp); 429d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0); 430d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(zbpitch); 431d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie } 432d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie 433d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(atom->cmd[CTX_RB3D_ZSTENCILCNTL]); 434d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(atom->cmd[CTX_CMD_1]); 435d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(atom->cmd[CTX_PP_CNTL]); 436d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(atom->cmd[CTX_RB3D_CNTL]); 437d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie 438ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie rrb = r200->radeon.state.color.rrb; 439ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie if (r200->radeon.radeonScreen->driScreen->dri2.enabled) { 440ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie rrb = (struct radeon_renderbuffer *)fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer; 441ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie } 442ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie if (!rrb || !rrb->bo) { 443d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(atom->cmd[CTX_RB3D_COLOROFFSET]); 444d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie } else { 445d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0); 446ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie } 447ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie 448d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(atom->cmd[CTX_CMD_2]); 449d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie 450d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie if (!rrb || !rrb->bo) { 451d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(atom->cmd[CTX_RB3D_COLORPITCH]); 452d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie } else { 453d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie cbpitch = (rrb->pitch / rrb->cpp); 454d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie if (rrb->cpp == 4) 455d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie ; 456d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie else 457d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie ; 458d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie if (r200->radeon.sarea->tiling_enabled) 459d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie cbpitch |= R200_COLOR_TILE_ENABLE; 460d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH(cbpitch); 461d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie } 462d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie 463d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM) 464d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie OUT_BATCH_TABLE((atom->cmd + 14), 4); 465d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie 466d9c4a01bad3a7d4a965fc09d8605afc6ca48f6f9Dave Airlie END_BATCH(); 467474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie} 468474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 469474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airliestatic void ctx_emit_cs(GLcontext *ctx, struct radeon_state_atom *atom) 470474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie{ 471474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 472474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BATCH_LOCALS(&r200->radeon); 473474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie struct radeon_renderbuffer *rrb, *drb; 474474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t cbpitch = 0; 475474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t zbpitch = 0; 476474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie uint32_t dwords = atom->cmd_size; 477474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie GLframebuffer *fb = r200->radeon.dri.drawable->driverPrivate; 478474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 479474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rrb = r200->radeon.state.color.rrb; 480474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (r200->radeon.radeonScreen->driScreen->dri2.enabled) { 481474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rrb = (struct radeon_renderbuffer *)fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer; 482474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } 483474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (rrb) { 484474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie assert(rrb->bo != NULL); 485474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie cbpitch = (rrb->pitch / rrb->cpp); 486474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (r200->radeon.sarea->tiling_enabled) 487474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie cbpitch |= R200_COLOR_TILE_ENABLE; 488474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } 489474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 490474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie drb = r200->radeon.state.depth.rrb; 491474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (drb) 492474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie zbpitch = (drb->pitch / drb->cpp); 493474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 494474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie /* output the first 7 bytes of context */ 495474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords); 496474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 497474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie /* In the CS case we need to split this up */ 498474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(packet[0].start, 3)); 499474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH_TABLE((atom->cmd + 1), 4); 500474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 501474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (drb) { 502474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(RADEON_RB3D_DEPTHOFFSET, 0)); 503474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0); 504474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 505474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(RADEON_RB3D_DEPTHPITCH, 0)); 506474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(zbpitch); 507474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } 508474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 509474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(RADEON_RB3D_ZSTENCILCNTL, 0)); 510474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(atom->cmd[CTX_RB3D_ZSTENCILCNTL]); 511474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(RADEON_PP_CNTL, 1)); 512474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(atom->cmd[CTX_PP_CNTL]); 513474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(atom->cmd[CTX_RB3D_CNTL]); 514474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 515474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 516474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (rrb) { 517474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(RADEON_RB3D_COLOROFFSET, 0)); 518474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH_RELOC(0, rrb->bo, 0, 0, RADEON_GEM_DOMAIN_VRAM, 0); 519474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } 520474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 521474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (rrb) { 522474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (rrb->cpp == 4) 523474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie ; 524474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie else 525474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie ; 526474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(CP_PACKET0(RADEON_RB3D_COLORPITCH, 0)); 527474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH(cbpitch); 528474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } 529474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 530474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (atom->cmd_size == CTX_STATE_SIZE_NEWDRM) { 531474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie OUT_BATCH_TABLE((atom->cmd + 14), 4); 532474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } 533474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 534474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie END_BATCH(); 535ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie} 536ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie 53761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airliestatic void tex_emit(GLcontext *ctx, struct radeon_state_atom *atom) 538ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie{ 53961bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 54061bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie BATCH_LOCALS(&r200->radeon); 54161bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie uint32_t dwords = atom->cmd_size; 54261bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie int i = atom->idx; 54361bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie radeonTexObj *t = r200->state.texture.unit[i].texobj; 54461bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie 545695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie if (t && t->mt && !t->image_override) 546695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie dwords += 2; 54761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords); 54861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie OUT_BATCH_TABLE(atom->cmd, 10); 54961bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie if (t && !t->image_override) { 55061bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie OUT_BATCH_RELOC(t->tile_bits, t->mt->bo, 0, 55161bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie RADEON_GEM_DOMAIN_VRAM, 0, 0); 55261bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie } else if (!t) { 553695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie /* workaround for old CS mechanism */ 554695ca1e2be6f222c132a76299fc3a0ac9143d960Dave Airlie OUT_BATCH(r200->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]); 5552753dd42fd42a3383d2e74ab231d0b1373a2d46dDave Airlie } else if (t->image_override) 5562753dd42fd42a3383d2e74ab231d0b1373a2d46dDave Airlie OUT_BATCH(atom->cmd[10]); 557ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie 55861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie END_BATCH(); 559ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie} 560ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie 561674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airliestatic void cube_emit(GLcontext *ctx, struct radeon_state_atom *atom) 562674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie{ 563674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie r200ContextPtr r200 = R200_CONTEXT(ctx); 564674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie BATCH_LOCALS(&r200->radeon); 565674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie uint32_t dwords = atom->cmd_size; 566674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie int i = atom->idx; 567674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie radeonTexObj *t = r200->state.texture.unit[i].texobj; 568674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie GLuint size; 569674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie 570f8c2beccd4847836dec18849d2d58f3220ff81ebDave Airlie BEGIN_BATCH_NO_AUTOSTATE(dwords + (2 * 5)); 571674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie OUT_BATCH_TABLE(atom->cmd, 3); 572674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie 573674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie if (t && !t->image_override) { 574674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie size = t->mt->totalsize / 6; 575674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie OUT_BATCH_RELOC(0, t->mt->bo, size, RADEON_GEM_DOMAIN_VRAM, 0, 0); 576674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie OUT_BATCH_RELOC(0, t->mt->bo, size * 2, RADEON_GEM_DOMAIN_VRAM, 0, 0); 577674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie OUT_BATCH_RELOC(0, t->mt->bo, size * 3, RADEON_GEM_DOMAIN_VRAM, 0, 0); 578674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie OUT_BATCH_RELOC(0, t->mt->bo, size * 4, RADEON_GEM_DOMAIN_VRAM, 0, 0); 579674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie OUT_BATCH_RELOC(0, t->mt->bo, size * 5, RADEON_GEM_DOMAIN_VRAM, 0, 0); 580674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie } 581674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie END_BATCH(); 582674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie} 583ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie 584adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Initialize the context's hardware state. 585adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */ 586adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid r200InitState( r200ContextPtr rmesa ) 587adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{ 5884637235183b80963536f2364e4d50fcb894886ddDave Airlie GLcontext *ctx = rmesa->radeon.glCtx; 589adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell GLuint color_fmt, depth_fmt, i; 590fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul GLint drawPitch, drawOffset; 591adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 5924637235183b80963536f2364e4d50fcb894886ddDave Airlie switch ( rmesa->radeon.radeonScreen->cpp ) { 593adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell case 2: 594adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell color_fmt = R200_COLOR_FORMAT_RGB565; 595adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell break; 596adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell case 4: 597adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell color_fmt = R200_COLOR_FORMAT_ARGB8888; 598adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell break; 599adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell default: 600adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell fprintf( stderr, "Error: Unsupported pixel depth... exiting\n" ); 601adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell exit( -1 ); 602adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } 603adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 604d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.color.clear = 0x00000000; 605adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 606adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell switch ( ctx->Visual.depthBits ) { 607adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell case 16: 608d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.depth.clear = 0x0000ffff; 609d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.depth.scale = 1.0 / (GLfloat)0xffff; 610adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell depth_fmt = R200_DEPTH_FORMAT_16BIT_INT_Z; 611d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.stencil.clear = 0x00000000; 612adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell break; 613adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell case 24: 614d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.depth.clear = 0x00ffffff; 615d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.depth.scale = 1.0 / (GLfloat)0xffffff; 616adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell depth_fmt = R200_DEPTH_FORMAT_24BIT_INT_Z; 617d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.stencil.clear = 0xffff0000; 618adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell break; 619adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell default: 620adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell fprintf( stderr, "Error: Unsupported depth %d... exiting\n", 621adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Visual.depthBits ); 622adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell exit( -1 ); 623adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } 624adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 625adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell /* Only have hw stencil when depth buffer is 24 bits deep */ 626d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.stencil.hwBuffer = ( ctx->Visual.stencilBits > 0 && 627adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Visual.depthBits == 24 ); 628adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 6294637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.Fallback = 0; 630adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 6314637235183b80963536f2364e4d50fcb894886ddDave Airlie if ( ctx->Visual.doubleBufferMode && rmesa->radeon.sarea->pfCurrentPage == 0 ) { 6324637235183b80963536f2364e4d50fcb894886ddDave Airlie drawOffset = rmesa->radeon.radeonScreen->backOffset; 6334637235183b80963536f2364e4d50fcb894886ddDave Airlie drawPitch = rmesa->radeon.radeonScreen->backPitch; 634fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul } else { 6354637235183b80963536f2364e4d50fcb894886ddDave Airlie drawOffset = rmesa->radeon.radeonScreen->frontOffset; 6364637235183b80963536f2364e4d50fcb894886ddDave Airlie drawPitch = rmesa->radeon.radeonScreen->frontPitch; 637fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul } 638fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 000 639fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul if ( ctx->Visual.doubleBufferMode && rmesa->sarea->pfCurrentPage == 0 ) { 640d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.color.drawOffset = rmesa->radeon.radeonScreen->backOffset; 641d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.color.drawPitch = rmesa->radeon.radeonScreen->backPitch; 642adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } else { 643d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.color.drawOffset = rmesa->radeon.radeonScreen->frontOffset; 644d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.color.drawPitch = rmesa->radeon.radeonScreen->frontPitch; 645adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } 646adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 647d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->state.pixel.readOffset = rmesa->radeon.state.color.drawOffset; 648d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->state.pixel.readPitch = rmesa->radeon.state.color.drawPitch; 649fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif 650adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 6511090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie rmesa->radeon.hw.max_state_size = 0; 652adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 653adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ALLOC_STATE( ATOM, CHK, SZ, NM, IDX ) \ 654adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell do { \ 655adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ATOM.cmd_size = SZ; \ 6564637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->hw.ATOM.cmd = (GLuint *)CALLOC(SZ * sizeof(int)); \ 6574637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->hw.ATOM.lastcmd = (GLuint *)CALLOC(SZ * sizeof(int)); \ 658adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ATOM.name = NM; \ 659adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ATOM.idx = IDX; \ 6600c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt rmesa->hw.ATOM.check = check_##CHK; \ 6610c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt rmesa->hw.ATOM.dirty = GL_FALSE; \ 6621090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie rmesa->radeon.hw.max_state_size += SZ * sizeof(int); \ 663adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } while (0) 664f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger 665f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger 666adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell /* Allocate state buffers: 667adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */ 6684637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsBlendColor) 669033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger ALLOC_STATE( ctx, always, CTX_STATE_SIZE_NEWDRM, "CTX/context", 0 ); 670033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger else 671033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger ALLOC_STATE( ctx, always, CTX_STATE_SIZE_OLDDRM, "CTX/context", 0 ); 672ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie 673474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (rmesa->radeon.radeonScreen->kernel_mm) 674474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.ctx.emit = ctx_emit_cs; 675474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie else 676474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.ctx.emit = ctx_emit; 677adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( set, always, SET_STATE_SIZE, "SET/setup", 0 ); 678adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lin, always, LIN_STATE_SIZE, "LIN/line", 0 ); 679adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( msk, always, MSK_STATE_SIZE, "MSK/mask", 0 ); 680adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( vpt, always, VPT_STATE_SIZE, "VPT/viewport", 0 ); 681adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( vtx, always, VTX_STATE_SIZE, "VTX/vertex", 0 ); 682adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( vap, always, VAP_STATE_SIZE, "VAP/vap", 0 ); 683adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( vte, always, VTE_STATE_SIZE, "VTE/vte", 0 ); 684adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( msc, always, MSC_STATE_SIZE, "MSC/misc", 0 ); 685adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( cst, always, CST_STATE_SIZE, "CST/constant", 0 ); 686adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( zbs, always, ZBS_STATE_SIZE, "ZBS/zbias", 0 ); 687f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tf, tf, TF_STATE_SIZE, "TF/tfactor", 0 ); 6884637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsFragShader) { 6894637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) { 690f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger /* make sure texture units 0/1 are emitted pair-wise for r200 t0 hang workaround */ 691f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[0], tex_pair, TEX_STATE_SIZE_NEWDRM, "TEX/tex-0", 0 ); 692f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[1], tex_pair, TEX_STATE_SIZE_NEWDRM, "TEX/tex-1", 1 ); 693f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 ); 694f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger } 695f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger else { 696f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[0], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-0", 0 ); 697f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[1], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-1", 1 ); 698f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tam, never, TAM_STATE_SIZE, "TAM/tam", 0 ); 699f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger } 700f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[2], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-2", 2 ); 701f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[3], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-3", 3 ); 702f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[4], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-4", 4 ); 703f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[5], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-5", 5 ); 704f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( atf, afs, ATF_STATE_SIZE, "ATF/tfactor", 0 ); 705f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( afs[0], afs_pass1, AFS_STATE_SIZE, "AFS/afsinst-0", 0 ); 706f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( afs[1], afs, AFS_STATE_SIZE, "AFS/afsinst-1", 1 ); 70748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger } 70848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger else { 7094637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) { 710f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[0], tex_pair, TEX_STATE_SIZE_OLDDRM, "TEX/tex-0", 0 ); 711f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[1], tex_pair, TEX_STATE_SIZE_OLDDRM, "TEX/tex-1", 1 ); 712f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 ); 713f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger } 714f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger else { 715f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[0], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-0", 0 ); 716f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[1], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-1", 1 ); 717f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tam, never, TAM_STATE_SIZE, "TAM/tam", 0 ); 718f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger } 719f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[2], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-2", 2 ); 720f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[3], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-3", 3 ); 721f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[4], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-4", 4 ); 722f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( tex[5], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-5", 5 ); 723f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( atf, never, ATF_STATE_SIZE, "TF/tfactor", 0 ); 724f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( afs[0], never, AFS_STATE_SIZE, "AFS/afsinst-0", 0 ); 725f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( afs[1], never, AFS_STATE_SIZE, "AFS/afsinst-1", 1 ); 72648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger } 72761bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie 72861bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie for (i = 0; i < 5; i++) 72961bb82636f7b1681b5509e1a9038bbcc1feea35cDave Airlie rmesa->hw.tex[i].emit = tex_emit; 7304637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsCubeMapsR200) { 73148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[0], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-0", 0 ); 73248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[1], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-1", 1 ); 73348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[2], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-2", 2 ); 73448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[3], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-3", 3 ); 73548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[4], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-4", 4 ); 73648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[5], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-5", 5 ); 737674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie for (i = 0; i < 5; i++) 738674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie rmesa->hw.cube[i].emit = cube_emit; 739bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl } 740bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl else { 741bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl ALLOC_STATE( cube[0], never, CUBE_STATE_SIZE, "CUBE/tex-0", 0 ); 742bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl ALLOC_STATE( cube[1], never, CUBE_STATE_SIZE, "CUBE/tex-1", 1 ); 74348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[2], never, CUBE_STATE_SIZE, "CUBE/tex-2", 2 ); 74448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[3], never, CUBE_STATE_SIZE, "CUBE/tex-3", 3 ); 74548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[4], never, CUBE_STATE_SIZE, "CUBE/tex-4", 4 ); 74648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( cube[5], never, CUBE_STATE_SIZE, "CUBE/tex-5", 5 ); 747bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl } 748674b204ba7c4854fec92a0c939de5012fecb6d87Dave Airlie 7494637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsVertexProgram) { 75098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( pvs, tcl_vp, PVS_STATE_SIZE, "PVS/pvscntl", 0 ); 75198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( vpi[0], tcl_vp, VPI_STATE_SIZE, "VP/vertexprog-0", 0 ); 75298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( vpi[1], tcl_vp_size, VPI_STATE_SIZE, "VP/vertexprog-1", 1 ); 75398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( vpp[0], tcl_vp, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 ); 75498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( vpp[1], tcl_vpp_size, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 ); 75598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger } 75698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger else { 75798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( pvs, never, PVS_STATE_SIZE, "PVS/pvscntl", 0 ); 75898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( vpi[0], never, VPI_STATE_SIZE, "VP/vertexprog-0", 0 ); 75998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( vpi[1], never, VPI_STATE_SIZE, "VP/vertexprog-1", 1 ); 76098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( vpp[0], never, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 ); 76198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( vpp[1], never, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 ); 76298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger } 76398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger /* FIXME: this atom has two commands, we need only one (ucp_vert_blend) for vp */ 76498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( tcl, tcl_or_vp, TCL_STATE_SIZE, "TCL/tcl", 0 ); 765adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( msl, tcl, MSL_STATE_SIZE, "MSL/matrix-select", 0 ); 766adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( tcg, tcl, TCG_STATE_SIZE, "TCG/texcoordgen", 0 ); 767adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( mtl[0], tcl_lighting, MTL_STATE_SIZE, "MTL0/material0", 0 ); 768a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger ALLOC_STATE( mtl[1], tcl_lighting, MTL_STATE_SIZE, "MTL1/material1", 1 ); 76998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger ALLOC_STATE( grd, tcl_or_vp, GRD_STATE_SIZE, "GRD/guard-band", 0 ); 770014bfda235e5315baf84b1d47329be167dd2ec7fRoland Scheidegger ALLOC_STATE( fog, tcl_fog, FOG_STATE_SIZE, "FOG/fog", 0 ); 771adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( glt, tcl_lighting, GLT_STATE_SIZE, "GLT/light-global", 0 ); 772adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( eye, tcl_lighting, EYE_STATE_SIZE, "EYE/eye-vector", 0 ); 773adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( mat[R200_MTX_MV], tcl, MAT_STATE_SIZE, "MAT/modelview", 0 ); 774adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( mat[R200_MTX_IMV], tcl, MAT_STATE_SIZE, "MAT/it-modelview", 0 ); 775adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( mat[R200_MTX_MVP], tcl, MAT_STATE_SIZE, "MAT/modelproject", 0 ); 776adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( mat[R200_MTX_TEX0], tcl_tex, MAT_STATE_SIZE, "MAT/texmat0", 0 ); 777adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( mat[R200_MTX_TEX1], tcl_tex, MAT_STATE_SIZE, "MAT/texmat1", 1 ); 77848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( mat[R200_MTX_TEX2], tcl_tex, MAT_STATE_SIZE, "MAT/texmat2", 2 ); 77948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( mat[R200_MTX_TEX3], tcl_tex, MAT_STATE_SIZE, "MAT/texmat3", 3 ); 78048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( mat[R200_MTX_TEX4], tcl_tex, MAT_STATE_SIZE, "MAT/texmat4", 4 ); 78148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger ALLOC_STATE( mat[R200_MTX_TEX5], tcl_tex, MAT_STATE_SIZE, "MAT/texmat5", 5 ); 782adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( ucp[0], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-0", 0 ); 783adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( ucp[1], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-1", 1 ); 784adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( ucp[2], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-2", 2 ); 785adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( ucp[3], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-3", 3 ); 786adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( ucp[4], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-4", 4 ); 787adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( ucp[5], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-5", 5 ); 788adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lit[0], tcl_light, LIT_STATE_SIZE, "LIT/light-0", 0 ); 789adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lit[1], tcl_light, LIT_STATE_SIZE, "LIT/light-1", 1 ); 790adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lit[2], tcl_light, LIT_STATE_SIZE, "LIT/light-2", 2 ); 791adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lit[3], tcl_light, LIT_STATE_SIZE, "LIT/light-3", 3 ); 792adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lit[4], tcl_light, LIT_STATE_SIZE, "LIT/light-4", 4 ); 793adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lit[5], tcl_light, LIT_STATE_SIZE, "LIT/light-5", 5 ); 794adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lit[6], tcl_light, LIT_STATE_SIZE, "LIT/light-6", 6 ); 795adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ALLOC_STATE( lit[7], tcl_light, LIT_STATE_SIZE, "LIT/light-7", 7 ); 796f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger ALLOC_STATE( pix[0], pix_zero, PIX_STATE_SIZE, "PIX/pixstage-0", 0 ); 79736603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger ALLOC_STATE( pix[1], texenv, PIX_STATE_SIZE, "PIX/pixstage-1", 1 ); 79836603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger ALLOC_STATE( pix[2], texenv, PIX_STATE_SIZE, "PIX/pixstage-2", 2 ); 79936603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger ALLOC_STATE( pix[3], texenv, PIX_STATE_SIZE, "PIX/pixstage-3", 3 ); 80036603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger ALLOC_STATE( pix[4], texenv, PIX_STATE_SIZE, "PIX/pixstage-4", 4 ); 80136603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger ALLOC_STATE( pix[5], texenv, PIX_STATE_SIZE, "PIX/pixstage-5", 5 ); 8024637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsTriPerf) { 803fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger ALLOC_STATE( prf, always, PRF_STATE_SIZE, "PRF/performance-tri", 0 ); 804fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger } 805fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger else { 806fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger ALLOC_STATE( prf, never, PRF_STATE_SIZE, "PRF/performance-tri", 0 ); 807fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger } 8084637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsPointSprites) { 80944dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger ALLOC_STATE( spr, always, SPR_STATE_SIZE, "SPR/pointsprite", 0 ); 810cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger ALLOC_STATE( ptp, tcl, PTP_STATE_SIZE, "PTP/pointparams", 0 ); 811cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger } 812cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger else { 81344dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger ALLOC_STATE (spr, never, SPR_STATE_SIZE, "SPR/pointsprite", 0 ); 814cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger ALLOC_STATE (ptp, never, PTP_STATE_SIZE, "PTP/pointparams", 0 ); 815cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger } 816adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 8170c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt r200SetUpAtomList( rmesa ); 818adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 819adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell /* Fill in the packet headers: 820adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */ 821474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.ctx.cmd[CTX_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_PP_MISC); 822474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.ctx.cmd[CTX_CMD_1] = cmdpkt(rmesa, RADEON_EMIT_PP_CNTL); 823474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.ctx.cmd[CTX_CMD_2] = cmdpkt(rmesa, RADEON_EMIT_RB3D_COLORPITCH); 8244637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsBlendColor) 825474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.ctx.cmd[CTX_CMD_3] = cmdpkt(rmesa, R200_EMIT_RB3D_BLENDCOLOR); 826474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.lin.cmd[LIN_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RE_LINE_PATTERN); 827474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.lin.cmd[LIN_CMD_1] = cmdpkt(rmesa, RADEON_EMIT_SE_LINE_WIDTH); 828474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.msk.cmd[MSK_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RB3D_STENCILREFMASK); 829474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vpt.cmd[VPT_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_VPORT_XSCALE); 830474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.set.cmd[SET_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_CNTL); 831474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.msc.cmd[MSC_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_RE_MISC); 832474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cst.cmd[CST_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CNTL_X); 833474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cst.cmd[CST_CMD_1] = cmdpkt(rmesa, R200_EMIT_RB3D_DEPTHXY_OFFSET); 834474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cst.cmd[CST_CMD_2] = cmdpkt(rmesa, R200_EMIT_RE_AUX_SCISSOR_CNTL); 835474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cst.cmd[CST_CMD_3] = cmdpkt(rmesa, R200_EMIT_RE_SCISSOR_TL_0); 836474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cst.cmd[CST_CMD_4] = cmdpkt(rmesa, R200_EMIT_SE_VAP_CNTL_STATUS); 837474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cst.cmd[CST_CMD_5] = cmdpkt(rmesa, R200_EMIT_RE_POINTSIZE); 838474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cst.cmd[CST_CMD_6] = cmdpkt(rmesa, R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0); 839474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tam.cmd[TAM_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TAM_DEBUG3); 840474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tf.cmd[TF_CMD_0] = cmdpkt(rmesa, R200_EMIT_TFACTOR_0); 8414637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsFragShader) { 842474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.atf.cmd[ATF_CMD_0] = cmdpkt(rmesa, R200_EMIT_ATF_TFACTOR); 843474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_0); 844474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[0].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_0); 845474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_1); 846474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[1].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_1); 847474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_2); 848474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[2].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_2); 849474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_3); 850474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[3].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_3); 851474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_4); 852474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[4].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_4); 853474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCTLALL_5); 854474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[5].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_5); 855f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger } else { 856474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_0); 857474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[0].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_0); 858474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_1); 859474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[1].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_1); 860474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_2); 861474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[2].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_2); 862474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_3); 863474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[3].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_3); 864474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_4); 865474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[4].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_4); 866474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXFILTER_5); 867474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tex[5].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(rmesa, R200_EMIT_PP_TXOFFSET_5); 868474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie } 869474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.afs[0].cmd[AFS_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_AFS_0); 870474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.afs[1].cmd[AFS_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_AFS_1); 871474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.pvs.cmd[PVS_CMD_0] = cmdpkt(rmesa, R200_EMIT_VAP_PVS_CNTL); 872474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[0].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_0); 873474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[0].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_0); 874474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[1].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_1); 875474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[1].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_1); 876474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[2].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_2); 877474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[2].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_2); 878474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[3].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_3); 879474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[3].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_3); 880474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[4].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_4); 881474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[4].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_4); 882474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[5].cmd[CUBE_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_FACES_5); 883474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.cube[5].cmd[CUBE_CMD_1] = cmdpkt(rmesa, R200_EMIT_PP_CUBIC_OFFSETS_5); 884474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.pix[0].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_0); 885474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.pix[1].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_1); 886474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.pix[2].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_2); 887474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.pix[3].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_3); 888474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.pix[4].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_4); 889474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.pix[5].cmd[PIX_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TXCBLEND_5); 890474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.zbs.cmd[ZBS_CMD_0] = cmdpkt(rmesa, RADEON_EMIT_SE_ZBIAS_FACTOR); 891474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tcl.cmd[TCL_CMD_0] = cmdpkt(rmesa, R200_EMIT_TCL_LIGHT_MODEL_CTL_0); 892474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tcl.cmd[TCL_CMD_1] = cmdpkt(rmesa, R200_EMIT_TCL_UCP_VERT_BLEND_CTL); 893474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.tcg.cmd[TCG_CMD_0] = cmdpkt(rmesa, R200_EMIT_TEX_PROC_CTL_2); 894474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.msl.cmd[MSL_CMD_0] = cmdpkt(rmesa, R200_EMIT_MATRIX_SELECT_0); 895474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vap.cmd[VAP_CMD_0] = cmdpkt(rmesa, R200_EMIT_VAP_CTL); 896474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vtx.cmd[VTX_CMD_0] = cmdpkt(rmesa, R200_EMIT_VTX_FMT_0); 897474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vtx.cmd[VTX_CMD_1] = cmdpkt(rmesa, R200_EMIT_OUTPUT_VTX_COMP_SEL); 898474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vtx.cmd[VTX_CMD_2] = cmdpkt(rmesa, R200_EMIT_SE_VTX_STATE_CNTL); 899474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vte.cmd[VTE_CMD_0] = cmdpkt(rmesa, R200_EMIT_VTE_CNTL); 900474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.prf.cmd[PRF_CMD_0] = cmdpkt(rmesa, R200_EMIT_PP_TRI_PERF_CNTL); 901474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.spr.cmd[SPR_CMD_0] = cmdpkt(rmesa, R200_EMIT_TCL_POINT_SPRITE_CNTL); 902474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie if (rmesa->radeon.radeonScreen->kernel_mm) { 903474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.mtl[0].emit = mtl_emit; 904474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.mtl[1].emit = mtl_emit; 905474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 906474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vpi[0].emit = veclinear_emit; 907474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vpi[1].emit = veclinear_emit; 908474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vpp[0].emit = veclinear_emit; 909474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.vpp[1].emit = veclinear_emit; 910474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 911474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.grd.emit = scl_emit; 912474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.fog.emit = vec_emit; 913474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.glt.emit = vec_emit; 914474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.eye.emit = vec_emit; 915474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 916474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie for (i = R200_MTX_MV; i <= R200_MTX_TEX5; i++) 917474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.mat[i].emit = vec_emit; 918474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 919474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie for (i = 0; i < 8; i++) 920474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.lit[i].emit = lit_emit; 921474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 922474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie for (i = 0; i < 6; i++) 923474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.ucp[i].emit = vec_emit; 924474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 925474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie rmesa->hw.ptp.emit = ptp_emit; 926f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger } 927474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 928474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 929474d282a1d5435e7b5de40538d65f54e32ce4713Dave Airlie 930adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.mtl[0].cmd[MTL_CMD_0] = 931adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_MAT_0_EMISS, 1, 16 ); 932adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.mtl[0].cmd[MTL_CMD_1] = 933adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdscl2( R200_SS_MAT_0_SHININESS, 1, 1 ); 934a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger rmesa->hw.mtl[1].cmd[MTL_CMD_0] = 935a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger cmdvec( R200_VS_MAT_1_EMISS, 1, 16 ); 936a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger rmesa->hw.mtl[1].cmd[MTL_CMD_1] = 937a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger cmdscl2( R200_SS_MAT_1_SHININESS, 1, 1 ); 938a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger 93998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger rmesa->hw.vpi[0].cmd[VPI_CMD_0] = 94098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger cmdveclinear( R200_PVS_PROG0, 64 ); 94198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger rmesa->hw.vpi[1].cmd[VPI_CMD_0] = 94298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger cmdveclinear( R200_PVS_PROG1, 64 ); 94398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger rmesa->hw.vpp[0].cmd[VPP_CMD_0] = 94498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger cmdveclinear( R200_PVS_PARAM0, 96 ); 94598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger rmesa->hw.vpp[1].cmd[VPP_CMD_0] = 94698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger cmdveclinear( R200_PVS_PARAM1, 96 ); 94798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger 948adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.grd.cmd[GRD_CMD_0] = 949adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdscl( R200_SS_VERT_GUARD_CLIP_ADJ_ADDR, 1, 4 ); 950adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.fog.cmd[FOG_CMD_0] = 951adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_FOG_PARAM_ADDR, 1, 4 ); 952adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.glt.cmd[GLT_CMD_0] = 953adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_GLOBAL_AMBIENT_ADDR, 1, 4 ); 954adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.eye.cmd[EYE_CMD_0] = 955adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_EYE_VECTOR_ADDR, 1, 4 ); 956adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 957adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.mat[R200_MTX_MV].cmd[MAT_CMD_0] = 958adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_MATRIX_0_MV, 1, 16); 959adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.mat[R200_MTX_IMV].cmd[MAT_CMD_0] = 960adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_MATRIX_1_INV_MV, 1, 16); 961adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.mat[R200_MTX_MVP].cmd[MAT_CMD_0] = 962adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_MATRIX_2_MVP, 1, 16); 963adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.mat[R200_MTX_TEX0].cmd[MAT_CMD_0] = 964adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_MATRIX_3_TEX0, 1, 16); 965adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.mat[R200_MTX_TEX1].cmd[MAT_CMD_0] = 966adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_MATRIX_4_TEX1, 1, 16); 96748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger rmesa->hw.mat[R200_MTX_TEX2].cmd[MAT_CMD_0] = 96848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger cmdvec( R200_VS_MATRIX_5_TEX2, 1, 16); 96948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger rmesa->hw.mat[R200_MTX_TEX3].cmd[MAT_CMD_0] = 97048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger cmdvec( R200_VS_MATRIX_6_TEX3, 1, 16); 97148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger rmesa->hw.mat[R200_MTX_TEX4].cmd[MAT_CMD_0] = 97248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger cmdvec( R200_VS_MATRIX_7_TEX4, 1, 16); 97348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger rmesa->hw.mat[R200_MTX_TEX5].cmd[MAT_CMD_0] = 97448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger cmdvec( R200_VS_MATRIX_8_TEX5, 1, 16); 975adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 976adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell for (i = 0 ; i < 8; i++) { 977adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.lit[i].cmd[LIT_CMD_0] = 978adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_LIGHT_AMBIENT_ADDR + i, 8, 24 ); 979adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.lit[i].cmd[LIT_CMD_1] = 980adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdscl( R200_SS_LIGHT_DCD_ADDR + i, 8, 7 ); 981adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } 982adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 983adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell for (i = 0 ; i < 6; i++) { 984adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ucp[i].cmd[UCP_CMD_0] = 985adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell cmdvec( R200_VS_UCP_ADDR + i, 1, 4 ); 986adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } 987adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 988cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_CMD_0] = 989cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger cmdvec( R200_VS_PNT_SPRITE_VPORT_SCALE, 1, 4 ); 990cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_CMD_1] = 991cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger cmdvec( R200_VS_PNT_SPRITE_ATT_CONST, 1, 12 ); 992cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger 993adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell /* Initial Harware state: 994adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */ 995adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_PP_MISC] = (R200_ALPHA_TEST_PASS 996adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell /* | R200_RIGHT_HAND_CUBE_OGL*/); 997adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 998adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_PP_FOG_COLOR] = (R200_FOG_VERTEX | 999adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_FOG_USE_SPEC_ALPHA); 1000adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1001adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_RE_SOLID_COLOR] = 0x00000000; 1002adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1003adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP | 1004033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger (R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) | 1005033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger (R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT)); 1006033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger 10074637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsBlendColor) { 1008033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCOLOR] = 0x00000000; 1009033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger rmesa->hw.ctx.cmd[CTX_RB3D_ABLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP | 1010033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger (R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) | 1011033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger (R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT)); 1012033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger rmesa->hw.ctx.cmd[CTX_RB3D_CBLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP | 1013033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger (R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) | 1014033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger (R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT)); 1015033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger } 1016adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1017adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHOFFSET] = 10184637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->depthOffset + rmesa->radeon.radeonScreen->fbLocation; 1019adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1020adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] = 10214637235183b80963536f2364e4d50fcb894886ddDave Airlie ((rmesa->radeon.radeonScreen->depthPitch & 1022adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_DEPTHPITCH_MASK) | 1023adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_DEPTH_ENDIAN_NO_SWAP); 1024b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger 1025b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger if (rmesa->using_hyperz) 1026b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] |= R200_DEPTH_HYPERZ; 1027adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1028adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] = (depth_fmt | 1029b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger R200_Z_TEST_LESS | 1030adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_STENCIL_TEST_ALWAYS | 1031adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_STENCIL_FAIL_KEEP | 1032adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_STENCIL_ZPASS_KEEP | 1033adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_STENCIL_ZFAIL_KEEP | 1034adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_Z_WRITE_ENABLE); 1035adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1036b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger if (rmesa->using_hyperz) { 1037b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= R200_Z_COMPRESSION_ENABLE | 1038b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger R200_Z_DECOMPRESSION_ENABLE; 10394637235183b80963536f2364e4d50fcb894886ddDave Airlie/* if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) 1040b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_Z_HIERARCHY_ENABLE;*/ 1041b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger } 1042b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger 1043adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_PP_CNTL] = (R200_ANTI_ALIAS_NONE 1044adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell | R200_TEX_BLEND_0_ENABLE); 1045adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1046adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] = color_fmt; 10474637235183b80963536f2364e4d50fcb894886ddDave Airlie switch ( driQueryOptioni( &rmesa->radeon.optionCache, "dither_mode" ) ) { 1048273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane case DRI_CONF_DITHER_XERRORDIFFRESET: 1049273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_INIT; 1050273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane break; 1051273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane case DRI_CONF_DITHER_ORDERED: 1052273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_SCALE_DITHER_ENABLE; 1053273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane break; 1054273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane } 10554637235183b80963536f2364e4d50fcb894886ddDave Airlie if ( driQueryOptioni( &rmesa->radeon.optionCache, "round_mode" ) == 1056273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane DRI_CONF_ROUND_ROUND ) 1057d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.color.roundEnable = R200_ROUND_ENABLE; 1058273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane else 1059d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->radeon.state.color.roundEnable = 0; 10604637235183b80963536f2364e4d50fcb894886ddDave Airlie if ( driQueryOptioni (&rmesa->radeon.optionCache, "color_reduction" ) == 1061273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane DRI_CONF_COLOR_REDUCTION_DITHER ) 1062273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_ENABLE; 1063273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane else 1064d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= rmesa->radeon.state.color.roundEnable; 1065273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane 1066fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 000 1067d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = ((rmesa->radeon.state.color.drawOffset + 10684637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->fbLocation) 1069273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane & R200_COLOROFFSET_MASK); 1070adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1071d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = ((rmesa->radeon.state.color.drawPitch & 1072adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_COLORPITCH_MASK) | 1073adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_COLOR_ENDIAN_NO_SWAP); 1074fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#else 1075fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = ((drawOffset + 10764637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->fbLocation) 1077fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul & R200_COLOROFFSET_MASK); 1078fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul 1079fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = ((drawPitch & 1080fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul R200_COLORPITCH_MASK) | 1081fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul R200_COLOR_ENDIAN_NO_SWAP); 1082fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif 1083a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger /* (fixed size) sarea is initialized to zero afaics so can omit version check. Phew! */ 10844637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.sarea->tiling_enabled) { 1085a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= R200_COLOR_TILE_ENABLE; 1086a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger } 1087adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1088fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger rmesa->hw.prf.cmd[PRF_PP_TRI_PERF] = R200_TRI_CUTOFF_MASK - R200_TRI_CUTOFF_MASK * 10894637235183b80963536f2364e4d50fcb894886ddDave Airlie driQueryOptionf (&rmesa->radeon.optionCache,"texture_blend_quality"); 1090fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger rmesa->hw.prf.cmd[PRF_PP_PERF_CNTL] = 0; 1091fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger 1092adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.set.cmd[SET_SE_CNTL] = (R200_FFACE_CULL_CCW | 1093adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_BFACE_SOLID | 1094adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_FFACE_SOLID | 1095adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_FLAT_SHADE_VTX_LAST | 1096adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_DIFFUSE_SHADE_GOURAUD | 1097adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_ALPHA_SHADE_GOURAUD | 1098adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_SPECULAR_SHADE_GOURAUD | 1099adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_FOG_SHADE_GOURAUD | 1100cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger R200_DISC_FOG_SHADE_GOURAUD | 1101adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VTX_PIX_CENTER_OGL | 1102adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_ROUND_MODE_TRUNC | 1103adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_ROUND_PREC_8TH_PIX); 1104adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1105adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.set.cmd[SET_RE_CNTL] = (R200_PERSPECTIVE_ENABLE | 1106adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_SCISSOR_ENABLE); 1107adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1108adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.lin.cmd[LIN_RE_LINE_PATTERN] = ((1 << 16) | 0xffff); 1109adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1110adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.lin.cmd[LIN_RE_LINE_STATE] = 1111adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((0 << R200_LINE_CURRENT_PTR_SHIFT) | 1112adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (1 << R200_LINE_CURRENT_COUNT_SHIFT)); 1113adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1114adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.lin.cmd[LIN_SE_LINE_WIDTH] = (1 << 4); 1115adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1116adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msk.cmd[MSK_RB3D_STENCILREFMASK] = 1117adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((0x00 << R200_STENCIL_REF_SHIFT) | 1118adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0xff << R200_STENCIL_MASK_SHIFT) | 1119adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0xff << R200_STENCIL_WRITEMASK_SHIFT)); 1120adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1121adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msk.cmd[MSK_RB3D_ROPCNTL] = R200_ROP_COPY; 1122adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msk.cmd[MSK_RB3D_PLANEMASK] = 0xffffffff; 1123adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1124adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tam.cmd[TAM_DEBUG3] = 0; 1125adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1126adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msc.cmd[MSC_RE_MISC] = 1127adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((0 << R200_STIPPLE_X_OFFSET_SHIFT) | 1128adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0 << R200_STIPPLE_Y_OFFSET_SHIFT) | 1129adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_STIPPLE_BIG_BIT_ORDER); 1130adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1131adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1132adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_PP_CNTL_X] = 0; 1133adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_RB3D_DEPTHXY_OFFSET] = 0; 1134adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_RE_AUX_SCISSOR_CNTL] = 0x0; 1135adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_RE_SCISSOR_TL_0] = 0; 1136adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_RE_SCISSOR_BR_0] = 0; 1137adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] = 1138adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#ifdef MESA_BIG_ENDIAN 1139adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VC_32BIT_SWAP; 1140adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#else 1141adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VC_NO_SWAP; 1142adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif 114310095c9024efb1767fb3df0b59672299c090ad10Eric Anholt 11444637235183b80963536f2364e4d50fcb894886ddDave Airlie if (!(rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) { 114510095c9024efb1767fb3df0b59672299c090ad10Eric Anholt /* Bypass TCL */ 114610095c9024efb1767fb3df0b59672299c090ad10Eric Anholt rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] |= (1<<8); 114710095c9024efb1767fb3df0b59672299c090ad10Eric Anholt } 114810095c9024efb1767fb3df0b59672299c090ad10Eric Anholt 114944dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger rmesa->hw.cst.cmd[CST_RE_POINTSIZE] = 115044dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger (((GLuint)(ctx->Const.MaxPointSize * 16.0)) << R200_MAXPOINTSIZE_SHIFT) | 0x10; 1151adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_0] = 1152adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x0 << R200_VERTEX_POSITION_ADDR__SHIFT); 1153adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_1] = 1154adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x02 << R200_VTX_COLOR_0_ADDR__SHIFT) | 1155adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x03 << R200_VTX_COLOR_1_ADDR__SHIFT); 1156adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_2] = 1157adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x06 << R200_VTX_TEX_0_ADDR__SHIFT) | 1158adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x07 << R200_VTX_TEX_1_ADDR__SHIFT) | 1159adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x08 << R200_VTX_TEX_2_ADDR__SHIFT) | 1160adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x09 << R200_VTX_TEX_3_ADDR__SHIFT); 1161adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_3] = 1162adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x0A << R200_VTX_TEX_4_ADDR__SHIFT) | 1163adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x0B << R200_VTX_TEX_5_ADDR__SHIFT); 1164adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1165adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1166adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vpt.cmd[VPT_SE_VPORT_XSCALE] = 0x00000000; 1167adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] = 0x00000000; 1168adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vpt.cmd[VPT_SE_VPORT_YSCALE] = 0x00000000; 1169adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] = 0x00000000; 1170adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZSCALE] = 0x00000000; 1171adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZOFFSET] = 0x00000000; 1172adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1173adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell for ( i = 0 ; i < ctx->Const.MaxTextureUnits ; i++ ) { 1174adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tex[i].cmd[TEX_PP_TXFILTER] = R200_BORDER_MODE_OGL; 1175adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT] = 1176adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((i << R200_TXFORMAT_ST_ROUTE_SHIFT) | /* <-- note i */ 1177adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (2 << R200_TXFORMAT_WIDTH_SHIFT) | 1178adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (2 << R200_TXFORMAT_HEIGHT_SHIFT)); 1179adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tex[i].cmd[TEX_PP_BORDER_COLOR] = 0; 1180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT_X] = 1181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (/* R200_TEXCOORD_PROJ | */ 1182adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 0x100000); /* Small default bias */ 11834637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->drmSupportsFragShader) { 1184f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_NEWDRM] = 11854637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]; 1186f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger rmesa->hw.tex[i].cmd[TEX_PP_CUBIC_FACES] = 0; 1187f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger rmesa->hw.tex[i].cmd[TEX_PP_TXMULTI_CTL] = 0; 1188f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger } 1189f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger else { 1190f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_OLDDRM] = 11914637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]; 1192f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger } 1193adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1194adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_FACES] = 0; 1195067603db91072fc3b02e1583195641972f81168fMichel Dänzer rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F1] = 11964637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]; 1197067603db91072fc3b02e1583195641972f81168fMichel Dänzer rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F2] = 11984637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]; 1199067603db91072fc3b02e1583195641972f81168fMichel Dänzer rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F3] = 12004637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]; 1201067603db91072fc3b02e1583195641972f81168fMichel Dänzer rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F4] = 12024637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]; 1203067603db91072fc3b02e1583195641972f81168fMichel Dänzer rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F5] = 12044637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP]; 1205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 12061bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND] = 12071bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger (R200_TXC_ARG_A_ZERO | 12081bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXC_ARG_B_ZERO | 12091bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXC_ARG_C_DIFFUSE_COLOR | 12101bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXC_OP_MADD); 12111bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger 12121bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND2] = 12131bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger ((i << R200_TXC_TFACTOR_SEL_SHIFT) | 12141bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXC_SCALE_1X | 12151bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXC_CLAMP_0_1 | 12161bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXC_OUTPUT_REG_R0); 12171bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger 12181bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND] = 12191bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger (R200_TXA_ARG_A_ZERO | 12201bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXA_ARG_B_ZERO | 12211bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXA_ARG_C_DIFFUSE_ALPHA | 12221bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXA_OP_MADD); 12231bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger 12241bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND2] = 12251bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger ((i << R200_TXA_TFACTOR_SEL_SHIFT) | 12261bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXA_SCALE_1X | 12271bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXA_CLAMP_0_1 | 12281bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger R200_TXA_OUTPUT_REG_R0); 12291bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger } 1230adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1231adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tf.cmd[TF_TFACTOR_0] = 0; 1232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tf.cmd[TF_TFACTOR_1] = 0; 1233adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tf.cmd[TF_TFACTOR_2] = 0; 1234adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tf.cmd[TF_TFACTOR_3] = 0; 1235adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tf.cmd[TF_TFACTOR_4] = 0; 1236adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tf.cmd[TF_TFACTOR_5] = 0; 1237adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1238adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL] = 1239adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_VAP_TCL_ENABLE | 1240adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (0x9 << R200_VAP_VF_MAX_VTX_NUM__SHIFT)); 1241adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1242adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vte.cmd[VTE_SE_VTE_CNTL] = 1243adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_VPORT_X_SCALE_ENA | 1244adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VPORT_Y_SCALE_ENA | 1245adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VPORT_Z_SCALE_ENA | 1246adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VPORT_X_OFFSET_ENA | 1247adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VPORT_Y_OFFSET_ENA | 1248adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VPORT_Z_OFFSET_ENA | 1249adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* FIXME: Turn on for tex rect only */ 1250adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VTX_ST_DENORMALIZED | 1251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_VTX_W0_FMT); 1252adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1254adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vtx.cmd[VTX_VTXFMT_0] = 0; 1255adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vtx.cmd[VTX_VTXFMT_1] = 0; 1256adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_0] = 1257adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((R200_VTX_Z0 | R200_VTX_W0 | 1258adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_VTX_FP_RGBA << R200_VTX_COLOR_0_SHIFT))); 1259adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] = 0; 1260adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_COMPSEL] = (R200_OUTPUT_XYZW); 1261adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.vtx.cmd[VTX_STATE_CNTL] = R200_VSC_UPDATE_USER_COLOR_0_ENABLE; 1262adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1263adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1264adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell /* Matrix selection */ 1265adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_0] = 1266adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_MTX_MV << R200_MODELVIEW_0_SHIFT); 1267adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1268adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_1] = 1269adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_MTX_IMV << R200_IT_MODELVIEW_0_SHIFT); 1270adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1271adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_2] = 1272adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_MTX_MVP << R200_MODELPROJECT_0_SHIFT); 1273adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1274adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_3] = 1275adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((R200_MTX_TEX0 << R200_TEXMAT_0_SHIFT) | 1276adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_MTX_TEX1 << R200_TEXMAT_1_SHIFT) | 1277adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_MTX_TEX2 << R200_TEXMAT_2_SHIFT) | 1278adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_MTX_TEX3 << R200_TEXMAT_3_SHIFT)); 1279adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1280adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_4] = 1281adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((R200_MTX_TEX4 << R200_TEXMAT_4_SHIFT) | 1282adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_MTX_TEX5 << R200_TEXMAT_5_SHIFT)); 1283adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1284adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1285adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell /* General TCL state */ 1286adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_0] = 1287adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_SPECULAR_LIGHTS | 1288adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_DIFFUSE_SPECULAR_COMBINE | 1289a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger R200_LOCAL_LIGHT_VEC_GL | 1290a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger R200_LM0_SOURCE_MATERIAL_0 << R200_FRONT_SHININESS_SOURCE_SHIFT | 1291a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger R200_LM0_SOURCE_MATERIAL_1 << R200_BACK_SHININESS_SOURCE_SHIFT); 1292adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1293adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_1] = 1294a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger ((R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_EMISSIVE_SOURCE_SHIFT) | 1295a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_AMBIENT_SOURCE_SHIFT) | 1296a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_DIFFUSE_SOURCE_SHIFT) | 1297a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_SPECULAR_SOURCE_SHIFT) | 1298a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_EMISSIVE_SOURCE_SHIFT) | 1299a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_AMBIENT_SOURCE_SHIFT) | 1300a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_DIFFUSE_SOURCE_SHIFT) | 1301a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_SPECULAR_SOURCE_SHIFT)); 1302adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1303adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_0] = 0; /* filled in via callbacks */ 1304adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_1] = 0; 1305adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_2] = 0; 1306adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_3] = 0; 1307adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1308adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] = 1309adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (R200_UCP_IN_CLIP_SPACE | 1310adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell R200_CULL_FRONT_IS_CCW); 1311adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1312adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell /* Texgen/Texmat state */ 1313b1ebd306bf4fdc4076d3d3daa410b08f477cb4c4Eric Anholt rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_2] = 0x00ffffff; 1314adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_3] = 1315adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((0 << R200_TEXGEN_0_INPUT_TEX_SHIFT) | 1316adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (1 << R200_TEXGEN_1_INPUT_TEX_SHIFT) | 1317adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (2 << R200_TEXGEN_2_INPUT_TEX_SHIFT) | 1318adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (3 << R200_TEXGEN_3_INPUT_TEX_SHIFT) | 1319adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (4 << R200_TEXGEN_4_INPUT_TEX_SHIFT) | 1320adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (5 << R200_TEXGEN_5_INPUT_TEX_SHIFT)); 1321adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_0] = 0; 1322adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_1] = 1323adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ((0 << R200_TEXGEN_0_INPUT_SHIFT) | 1324adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (1 << R200_TEXGEN_1_INPUT_SHIFT) | 1325adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (2 << R200_TEXGEN_2_INPUT_SHIFT) | 1326adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (3 << R200_TEXGEN_3_INPUT_SHIFT) | 1327adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (4 << R200_TEXGEN_4_INPUT_SHIFT) | 1328adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (5 << R200_TEXGEN_5_INPUT_SHIFT)); 1329adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.tcg.cmd[TCG_TEX_CYL_WRAP_CTL] = 0; 1330adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1331adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1332adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell for (i = 0 ; i < 8; i++) { 1333adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell struct gl_light *l = &ctx->Light.Light[i]; 1334adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell GLenum p = GL_LIGHT0 + i; 1335adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell *(float *)&(rmesa->hw.lit[i].cmd[LIT_RANGE_CUTOFF]) = FLT_MAX; 1336adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1337adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Lightfv( ctx, p, GL_AMBIENT, l->Ambient ); 1338adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Lightfv( ctx, p, GL_DIFFUSE, l->Diffuse ); 1339adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Lightfv( ctx, p, GL_SPECULAR, l->Specular ); 13400846e52d46b36c411f79908df010072e03bb6437Brian Paul ctx->Driver.Lightfv( ctx, p, GL_POSITION, NULL ); 13410846e52d46b36c411f79908df010072e03bb6437Brian Paul ctx->Driver.Lightfv( ctx, p, GL_SPOT_DIRECTION, NULL ); 1342adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Lightfv( ctx, p, GL_SPOT_EXPONENT, &l->SpotExponent ); 1343adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Lightfv( ctx, p, GL_SPOT_CUTOFF, &l->SpotCutoff ); 1344adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Lightfv( ctx, p, GL_CONSTANT_ATTENUATION, 1345adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell &l->ConstantAttenuation ); 1346adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Lightfv( ctx, p, GL_LINEAR_ATTENUATION, 1347adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell &l->LinearAttenuation ); 1348adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Lightfv( ctx, p, GL_QUADRATIC_ATTENUATION, 1349bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl &l->QuadraticAttenuation ); 13505d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer *(float *)&(rmesa->hw.lit[i].cmd[LIT_ATTEN_XXX]) = 0.0; 1351adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } 1352adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1353adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.LightModelfv( ctx, GL_LIGHT_MODEL_AMBIENT, 1354adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Light.Model.Ambient ); 1355adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1356adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell TNL_CONTEXT(ctx)->Driver.NotifyMaterialChange( ctx ); 1357adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1358adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell for (i = 0 ; i < 6; i++) { 1359adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.ClipPlane( ctx, GL_CLIP_PLANE0 + i, NULL ); 1360adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell } 1361adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 13620846e52d46b36c411f79908df010072e03bb6437Brian Paul ctx->Driver.Fogfv( ctx, GL_FOG_MODE, NULL ); 1363adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Fogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density ); 1364adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Fogfv( ctx, GL_FOG_START, &ctx->Fog.Start ); 1365adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Fogfv( ctx, GL_FOG_END, &ctx->Fog.End ); 1366adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell ctx->Driver.Fogfv( ctx, GL_FOG_COLOR, ctx->Fog.Color ); 13670846e52d46b36c411f79908df010072e03bb6437Brian Paul ctx->Driver.Fogfv( ctx, GL_FOG_COORDINATE_SOURCE_EXT, NULL ); 1368adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1369adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.grd.cmd[GRD_VERT_GUARD_CLIP_ADJ] = IEEE_ONE; 1370adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.grd.cmd[GRD_VERT_GUARD_DISCARD_ADJ] = IEEE_ONE; 1371adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.grd.cmd[GRD_HORZ_GUARD_CLIP_ADJ] = IEEE_ONE; 1372adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.grd.cmd[GRD_HORZ_GUARD_DISCARD_ADJ] = IEEE_ONE; 1373adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1374adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.eye.cmd[EYE_X] = 0; 1375adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.eye.cmd[EYE_Y] = 0; 1376adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.eye.cmd[EYE_Z] = IEEE_ONE; 1377adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell rmesa->hw.eye.cmd[EYE_RESCALE_FACTOR] = IEEE_ONE; 1378adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 1379cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.spr.cmd[SPR_POINT_SPRITE_CNTL] = 1380cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger R200_PS_SE_SEL_STATE | R200_PS_MULT_CONST; 1381cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger 1382cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger /* ptp_eye is presumably used to calculate the attenuation wrt a different 1383cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger location? In any case, since point attenuation triggers _needeyecoords, 1384cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger it is constant. Probably ignored as long as R200_PS_USE_MODEL_EYE_VEC 1385cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger isn't set */ 1386cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_EYE_X] = 0; 1387cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_EYE_Y] = 0; 1388cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_EYE_Z] = IEEE_ONE | 0x80000000; /* -1.0 */ 1389cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_EYE_3] = 0; 1390cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger /* no idea what the ptp_vport_scale values are good for, except the 1391cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger PTSIZE one - hopefully doesn't matter */ 1392cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_0] = IEEE_ONE; 1393cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_1] = IEEE_ONE; 1394cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_PTSIZE] = IEEE_ONE; 1395cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_3] = IEEE_ONE; 1396cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_ATT_CONST_QUAD] = 0; 1397cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_ATT_CONST_LIN] = 0; 1398cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_ATT_CONST_CON] = IEEE_ONE; 1399cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_ATT_CONST_3] = 0; 1400cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_CLAMP_MIN] = IEEE_ONE; 1401cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_CLAMP_MAX] = 0x44ffe000; /* 2047 */ 1402cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_CLAMP_2] = 0; 1403cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger rmesa->hw.ptp.cmd[PTP_CLAMP_3] = 0; 140444dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger 1405adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell r200LightingSpaceChange( ctx ); 140644dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger 14071090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie rmesa->radeon.hw.all_dirty = GL_TRUE; 1408ed3a1cce73fcd0d6f4b6e9b5f69a98ad179ddc4bDave Airlie 14091090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie rcommonInitCmdBuf(&rmesa->radeon); 1410adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 1411