1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgCopyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Tungsten Graphics Inc., Austin, Texas. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgAll Rights Reserved. 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPermission is hereby granted, free of charge, to any person obtaining 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orga copy of this software and associated documentation files (the 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org"Software"), to deal in the Software without restriction, including 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgwithout limitation the rights to use, copy, modify, merge, publish, 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdistribute, sublicense, and/or sell copies of the Software, and to 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpermit persons to whom the Software is furnished to do so, subject to 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgthe following conditions: 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgThe above copyright notice and this permission notice (including the 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnext paragraph) shall be included in all copies or substantial 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgportions of the Software. 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org**************************************************************************/ 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Authors: 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Keith Whitwell <keith@tungstengraphics.com> 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/glheader.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/imports.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mtypes.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "vbo/vbo.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "math/m_translate.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tnl/tnl.h" 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tnl/t_pipeline.h" 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_context.h" 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_state.h" 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_ioctl.h" 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_tex.h" 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_tcl.h" 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_swtcl.h" 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos.h" 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_fog.h" 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RADEON_TCL_MAX_SETUP 19 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion emit_union { float f; GLuint ui; radeon_color_t rgba; }; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct { 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*emit)( struct gl_context *, GLuint, GLuint, void * ); 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vertex_size; 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vertex_format; 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} setup_tab[RADEON_TCL_MAX_SETUP]; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_W (IND & RADEON_CP_VC_FRMT_W0) 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_RGBA (IND & RADEON_CP_VC_FRMT_PKCOLOR) 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_SPEC_OR_FOG (IND & RADEON_CP_VC_FRMT_PKSPEC) 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_SPEC ((IND & RADEON_CP_VC_FRMT_PKSPEC) && \ 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)) 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_FOG ((IND & RADEON_CP_VC_FRMT_PKSPEC) && ctx->Fog.Enabled && \ 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (ctx->Fog.FogCoordinateSource == GL_FOG_COORD)) 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_TEX0 (IND & RADEON_CP_VC_FRMT_ST0) 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_TEX1 (IND & RADEON_CP_VC_FRMT_ST1) 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_TEX2 (IND & RADEON_CP_VC_FRMT_ST2) 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_PTEX (IND & RADEON_CP_VC_FRMT_Q0) 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_NORM (IND & RADEON_CP_VC_FRMT_N0) 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_TEX3 0 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GET_TEXSOURCE(n) n 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Generate vertex emit functions * 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ***********************************************************************/ 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Defined in order of increasing vertex size: 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 0 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR) 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 1 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_n 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 2 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0) 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_st 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 3 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_n 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 4 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_st_n 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 5 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1) 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_st_st 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 6 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_st_n 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 7 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKSPEC| \ 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1) 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_spec_st_st 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 8 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_st_st_n 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 9 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKSPEC| \ 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_spec_st_st_n 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 10 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q0) 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_stq 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 11 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q1| \ 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q0) 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_stq_stq 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 12 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_W0| \ 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKSPEC| \ 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q0| \ 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q1| \ 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_w_rgba_spec_stq_stq_n 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 13 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST2) 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_st_st_st 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 14 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKSPEC| \ 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST2) 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_spec_st_st_st 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 15 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST2| \ 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_st_st_st_n 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 16 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKSPEC| \ 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST2| \ 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_spec_st_st_st_n 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 17 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q0| \ 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q1| \ 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST2| \ 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q2) 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_rgba_stq_stq_stq 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IDX 18 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define IND (RADEON_CP_VC_FRMT_XY| \ 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Z| \ 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_W0| \ 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKCOLOR| \ 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_PKSPEC| \ 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST0| \ 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q0| \ 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST1| \ 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q1| \ 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_ST2| \ 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_Q2| \ 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_CP_VC_FRMT_N0) 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TAG(x) x##_w_rgba_spec_stq_stq_stq_n 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "radeon_maos_vbtmp.h" 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Initialization 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ***********************************************************************/ 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void init_tcl_verts( void ) 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba(); 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_n(); 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_n(); 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_st(); 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_st_n(); 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_st_st(); 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_st_n(); 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_spec_st_st(); 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_st_st_n(); 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_spec_st_st_n(); 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_stq(); 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_stq_stq(); 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_w_rgba_spec_stq_stq_n(); 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_st_st_st(); 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_spec_st_st_st(); 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_st_st_st_n(); 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_spec_st_st_st_n(); 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_rgba_stq_stq_stq(); 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_w_rgba_spec_stq_stq_stq_n(); 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid radeonEmitArrays( struct gl_context *ctx, GLuint inputs ) 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org r100ContextPtr rmesa = R100_CONTEXT(ctx); 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint req = 0; 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint unit; 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vtx = (rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] & 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ~(RADEON_TCL_VTX_Q0|RADEON_TCL_VTX_Q1|RADEON_TCL_VTX_Q2)); 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static int firsttime = 1; 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (firsttime) { 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_tcl_verts(); 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org firsttime = 0; 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (1) { 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req |= RADEON_CP_VC_FRMT_Z; 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VB->AttribPtr[_TNL_ATTRIB_POS]->size == 4) { 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req |= RADEON_CP_VC_FRMT_W0; 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inputs & VERT_BIT_NORMAL) { 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req |= RADEON_CP_VC_FRMT_N0; 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inputs & VERT_BIT_COLOR0) { 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req |= RADEON_CP_VC_FRMT_PKCOLOR; 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inputs & (VERT_BIT_COLOR1|VERT_BIT_FOG)) { 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req |= RADEON_CP_VC_FRMT_PKSPEC; 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) { 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (inputs & VERT_BIT_TEX(unit)) { 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req |= RADEON_ST_BIT(unit); 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* assume we need the 3rd coord if texgen is active for r/q OR at least 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3 coords are submitted. This may not be 100% correct */ 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size >= 3) { 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req |= RADEON_Q_BIT(unit); 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vtx |= RADEON_Q_BIT(unit); 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ( (ctx->Texture.Unit[unit].TexGenEnabled & (R_BIT | Q_BIT)) ) 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vtx |= RADEON_Q_BIT(unit); 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if ((VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size >= 3) && 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((ctx->Texture.Unit[unit]._ReallyEnabled & (TEXTURE_CUBE_BIT)) == 0)) { 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint swaptexmatcol = (VB->AttribPtr[_TNL_ATTRIB_TEX0 + unit]->size - 3); 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (((rmesa->NeedTexMatrix >> unit) & 1) && 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (swaptexmatcol != ((rmesa->TexMatColSwap >> unit) & 1))) 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org radeonUploadTexMatrix( rmesa, unit, swaptexmatcol ) ; 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vtx != rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT]) { 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RADEON_STATECHANGE( rmesa, tcl ); 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] = vtx; 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0 ; i < RADEON_TCL_MAX_SETUP ; i++) 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((setup_tab[i].vertex_format & req) == req) 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rmesa->tcl.vertex_format == setup_tab[i].vertex_format && 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rmesa->radeon.tcl.aos[0].bo) 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rmesa->radeon.tcl.aos[0].bo) 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org radeonReleaseArrays( ctx, ~0 ); 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org radeonAllocDmaRegion( &rmesa->radeon, 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &rmesa->radeon.tcl.aos[0].bo, 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &rmesa->radeon.tcl.aos[0].offset, 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VB->Count * setup_tab[i].vertex_size * 4, 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4); 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The vertex code expects Obj to be clean to element 3. To fix 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this, add more vertex code (for obj-2, obj-3) or preferably move 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to maos. 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VB->AttribPtr[_TNL_ATTRIB_POS]->size < 3 || 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (VB->AttribPtr[_TNL_ATTRIB_POS]->size == 3 && 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (setup_tab[i].vertex_format & RADEON_CP_VC_FRMT_W0))) { 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _math_trans_4f( rmesa->tcl.ObjClean.data, 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VB->AttribPtr[_TNL_ATTRIB_POS]->data, 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VB->AttribPtr[_TNL_ATTRIB_POS]->stride, 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_FLOAT, 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VB->AttribPtr[_TNL_ATTRIB_POS]->size, 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VB->Count ); 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (VB->AttribPtr[_TNL_ATTRIB_POS]->size) { 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 1); 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 2); 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (setup_tab[i].vertex_format & RADEON_CP_VC_FRMT_W0) { 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_vector4f_clean_elem(&rmesa->tcl.ObjClean, VB->Count, 3); 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VB->AttribPtr[_TNL_ATTRIB_POS] = &rmesa->tcl.ObjClean; 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org radeon_bo_map(rmesa->radeon.tcl.aos[0].bo, 1); 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org setup_tab[i].emit( ctx, 0, VB->Count, 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rmesa->radeon.tcl.aos[0].bo->ptr + rmesa->radeon.tcl.aos[0].offset); 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org radeon_bo_unmap(rmesa->radeon.tcl.aos[0].bo); 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org // rmesa->radeon.tcl.aos[0].size = setup_tab[i].vertex_size; 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rmesa->radeon.tcl.aos[0].stride = setup_tab[i].vertex_size; 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rmesa->tcl.vertex_format = setup_tab[i].vertex_format; 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rmesa->radeon.tcl.aos_count = 1; 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 433