15df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/************************************************************************** 25df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 35df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulCopyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and 45df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul VA Linux Systems Inc., Fremont, California. 55df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 65df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulAll Rights Reserved. 75df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 85df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulPermission is hereby granted, free of charge, to any person obtaining 95df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paula copy of this software and associated documentation files (the 105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul"Software"), to deal in the Software without restriction, including 115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulwithout limitation the rights to use, copy, modify, merge, publish, 125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Pauldistribute, sublicense, and/or sell copies of the Software, and to 135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulpermit persons to whom the Software is furnished to do so, subject to 145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulthe following conditions: 155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulThe above copyright notice and this permission notice (including the 175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulnext paragraph) shall be included in all copies or substantial 185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulportions of the Software. 195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul**************************************************************************/ 295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* 315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Authors: 325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Kevin E. Martin <martin@valinux.com> 335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Gareth Hughes <gareth@valinux.com> 345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Keith Whitwell <keith@tungstengraphics.com> 355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 376fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick#include <stdbool.h> 38acfeb3b6ea93bcb5b18e6f51a0727e39da608d76Brian#include "main/glheader.h" 39acfeb3b6ea93bcb5b18e6f51a0727e39da608d76Brian#include "main/api_arrayelt.h" 40acfeb3b6ea93bcb5b18e6f51a0727e39da608d76Brian#include "main/context.h" 41acfeb3b6ea93bcb5b18e6f51a0727e39da608d76Brian#include "main/simple_list.h" 42acfeb3b6ea93bcb5b18e6f51a0727e39da608d76Brian#include "main/imports.h" 43acfeb3b6ea93bcb5b18e6f51a0727e39da608d76Brian#include "main/extensions.h" 44fb9c6e681f91c986b7cbe2d6e9f6baceda00c415Vinson Lee#include "main/mfeatures.h" 45e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick#include "main/version.h" 465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "swrast/swrast.h" 485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "swrast_setup/swrast_setup.h" 4980c88304fc9d09531b2530b74973821e47b46753Keith Whitwell#include "vbo/vbo.h" 505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/tnl.h" 525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl/t_pipeline.h" 535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 54d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul#include "drivers/common/driverfuncs.h" 55d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul 5623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#include "radeon_common.h" 575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_context.h" 585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_ioctl.h" 595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_state.h" 605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_span.h" 615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_tex.h" 625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_swtcl.h" 635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_tcl.h" 645484428d7267388fde868e64531dcdf98b55fafcDave Airlie#include "radeon_queryobj.h" 655170d2452beafc4a6f5859792d6c6b267c549e46Maciej Cencora#include "radeon_blit.h" 6694556f359450acebe87d6c9b4f4fd8ccf78589d8Alex Deucher#include "radeon_fog.h" 675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "utils.h" 69d450d0b0e228e5b16c04b2a1acb9ea549aa690f2Brian Paul#include "xmlpool.h" /* for symbolic values of enum-type options */ 705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 7157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwellextern const struct tnl_pipeline_stage _radeon_render_stage; 7257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwellextern const struct tnl_pipeline_stage _radeon_tcl_stage; 735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 7457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwellstatic const struct tnl_pipeline_stage *radeon_pipeline[] = { 755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul /* Try and go straight to t&l 775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_radeon_tcl_stage, 795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul /* Catch any t&l fallbacks 815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_tnl_vertex_transform_stage, 835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_tnl_normal_transform_stage, 845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_tnl_lighting_stage, 855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_tnl_fog_coordinate_stage, 865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_tnl_texgen_stage, 875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_tnl_texture_transform_stage, 885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_radeon_render_stage, 905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul &_tnl_render_stage, /* FALLBACK: */ 912c28dd892cfb43445d7e54df8b6a8331192f4e99Brian Paul NULL, 925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul}; 935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 94d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airliestatic void r100_get_lock(radeonContextPtr radeon) 95d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie{ 96d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie r100ContextPtr rmesa = (r100ContextPtr)radeon; 97d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie drm_radeon_sarea_t *sarea = radeon->sarea; 98d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie 99d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie RADEON_STATECHANGE(rmesa, ctx); 100d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie if (rmesa->radeon.sarea->tiling_enabled) { 101d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= 102d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie RADEON_COLOR_TILE_ENABLE; 103d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie } else { 104d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] &= 105d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie ~RADEON_COLOR_TILE_ENABLE; 106d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie } 107d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie 108d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie if (sarea->ctx_owner != rmesa->radeon.dri.hwContext) { 109d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie sarea->ctx_owner = rmesa->radeon.dri.hwContext; 110d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie } 111d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie} 112d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie 11359b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airliestatic void r100_vtbl_emit_cs_header(struct radeon_cs *cs, radeonContextPtr rmesa) 11459b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie{ 11559b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie} 11659b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie 1171090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airliestatic void r100_vtbl_pre_emit_state(radeonContextPtr radeon) 11859b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie{ 1191090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie r100ContextPtr rmesa = (r100ContextPtr)radeon; 1201090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie 1211090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie /* r100 always needs to emit ZBS to avoid TCL lockups */ 1221090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie rmesa->hw.zbs.dirty = 1; 1231090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie radeon->hw.is_dirty = 1; 12436d3f3e74a809ad346e981805a2f61710d3a380bDave Airlie} 12536d3f3e74a809ad346e981805a2f61710d3a380bDave Airlie 126f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic void r100_vtbl_free_context(struct gl_context *ctx) 127e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie{ 128e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie r100ContextPtr rmesa = R100_CONTEXT(ctx); 129e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie _mesa_vector4f_free( &rmesa->tcl.ObjClean ); 130e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie} 13136d3f3e74a809ad346e981805a2f61710d3a380bDave Airlie 1325484428d7267388fde868e64531dcdf98b55fafcDave Airliestatic void r100_emit_query_finish(radeonContextPtr radeon) 1335484428d7267388fde868e64531dcdf98b55fafcDave Airlie{ 1345484428d7267388fde868e64531dcdf98b55fafcDave Airlie BATCH_LOCALS(radeon); 1355484428d7267388fde868e64531dcdf98b55fafcDave Airlie struct radeon_query_object *query = radeon->query.current; 1365484428d7267388fde868e64531dcdf98b55fafcDave Airlie 1375484428d7267388fde868e64531dcdf98b55fafcDave Airlie BEGIN_BATCH_NO_AUTOSTATE(4); 1385484428d7267388fde868e64531dcdf98b55fafcDave Airlie OUT_BATCH(CP_PACKET0(RADEON_RB3D_ZPASS_ADDR, 0)); 1395484428d7267388fde868e64531dcdf98b55fafcDave Airlie OUT_BATCH_RELOC(0, query->bo, query->curr_offset, 0, RADEON_GEM_DOMAIN_GTT, 0); 1405484428d7267388fde868e64531dcdf98b55fafcDave Airlie END_BATCH(); 1415484428d7267388fde868e64531dcdf98b55fafcDave Airlie query->curr_offset += sizeof(uint32_t); 1425484428d7267388fde868e64531dcdf98b55fafcDave Airlie assert(query->curr_offset < RADEON_QUERY_PAGE_SIZE); 1435484428d7267388fde868e64531dcdf98b55fafcDave Airlie query->emitted_begin = GL_FALSE; 1445484428d7267388fde868e64531dcdf98b55fafcDave Airlie} 1455484428d7267388fde868e64531dcdf98b55fafcDave Airlie 146d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airliestatic void r100_init_vtbl(radeonContextPtr radeon) 147d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie{ 148d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie radeon->vtbl.get_lock = r100_get_lock; 149d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie radeon->vtbl.update_viewport_offset = radeonUpdateViewportOffset; 15059b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie radeon->vtbl.emit_cs_header = r100_vtbl_emit_cs_header; 151b584b0728d3a001a142f76dde22f9e8ed7d2dd16Dave Airlie radeon->vtbl.swtcl_flush = r100_swtcl_flush; 1521090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie radeon->vtbl.pre_emit_state = r100_vtbl_pre_emit_state; 1532b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie radeon->vtbl.fallback = radeonFallback; 154c3374bf97ecd82b915fb29c7c04951e2b75d4dbcPauli Nieminen radeon->vtbl.free_context = r100_vtbl_free_context; 1555484428d7267388fde868e64531dcdf98b55fafcDave Airlie radeon->vtbl.emit_query_finish = r100_emit_query_finish; 1563594bf233d16ceb21e97fcdfb57ea45cb0c5e41bAlex Deucher radeon->vtbl.check_blit = r100_check_blit; 1575170d2452beafc4a6f5859792d6c6b267c549e46Maciej Cencora radeon->vtbl.blit = r100_blit; 158a17563c7ddfa58fe7f09d22a62a10f3488ef3147Maciej Cencora radeon->vtbl.is_format_renderable = radeonIsFormatRenderable; 159d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie} 1605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 1615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Create the device specific context. 1625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 1635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulGLboolean 164a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsbergr100CreateContext( gl_api api, 165d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg const struct gl_config *glVisual, 166a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg __DRIcontext *driContextPriv, 167e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick unsigned major_version, 168e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick unsigned minor_version, 169e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick uint32_t flags, 170e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick unsigned *error, 171a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg void *sharedContextPrivate) 1725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{ 173d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIscreen *sPriv = driContextPriv->driScreenPriv; 174875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis radeonScreenPtr screen = (radeonScreenPtr)(sPriv->driverPrivate); 175d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul struct dd_function_table functions; 1764637235183b80963536f2364e4d50fcb894886ddDave Airlie r100ContextPtr rmesa; 177f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg struct gl_context *ctx; 1785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul int i; 17999ef0a03292e7dc6aa2465aaaa620f394d2c286bAlan Hourihane int tcl_mode, fthrottle_mode; 1805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 18170f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick switch (api) { 18270f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick case API_OPENGL: 18370f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick if (major_version > 1 || minor_version > 3) { 18470f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick *error = __DRI_CTX_ERROR_BAD_VERSION; 18570f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick return GL_FALSE; 18670f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick } 18770f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick break; 18870f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick case API_OPENGLES: 18970f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick break; 19070f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick default: 19170f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick *error = __DRI_CTX_ERROR_BAD_API; 19270f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick return GL_FALSE; 19370f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick } 19470f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick 19570f47505a2e5d4cf949b7c2650f3d9f6559bacb3Ian Romanick /* Flag filtering is handled in dri2CreateContextAttribs. 196e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick */ 197e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick (void) flags; 198e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick 1995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul assert(glVisual); 2005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul assert(driContextPriv); 2015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul assert(screen); 2025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul /* Allocate the Radeon context */ 2044637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa = (r100ContextPtr) CALLOC( sizeof(*rmesa) ); 205e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick if ( !rmesa ) { 206e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick *error = __DRI_CTX_ERROR_NO_MEMORY; 2075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul return GL_FALSE; 208e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick } 2095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 210daccc962a15f333a4759849d7088b0c985189175Alex Deucher rmesa->radeon.radeonScreen = screen; 211d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie r100_init_vtbl(&rmesa->radeon); 212d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie 2132d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger /* init exp fog table data */ 2142d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger radeonInitStaticFogData(); 2152d61d301171620efe624d83a5457f4094eb49cbaRoland Scheidegger 216d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul /* Parse configuration files. 217d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul * Do this here so that initialMaxAnisotropy is set before we create 218d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul * the default textures. 219d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul */ 2204637235183b80963536f2364e4d50fcb894886ddDave Airlie driParseConfigFiles (&rmesa->radeon.optionCache, &screen->optionCache, 22183e0cfb8a0bf3a14b6f495060749251cf94719d9Felix Kuehling screen->driScreen->myNum, "radeon"); 2224637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.initialMaxAnisotropy = driQueryOptionf(&rmesa->radeon.optionCache, 223d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul "def_max_anisotropy"); 224d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul 2254637235183b80963536f2364e4d50fcb894886ddDave Airlie if ( driQueryOptionb( &rmesa->radeon.optionCache, "hyperz" ) ) { 226efd03a278ae55b454509e9659c42899133983ebdKristian Høgsberg if ( sPriv->drm_version.minor < 13 ) 227b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger fprintf( stderr, "DRM version 1.%d too old to support HyperZ, " 228efd03a278ae55b454509e9659c42899133983ebdKristian Høgsberg "disabling.\n", sPriv->drm_version.minor ); 229b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger else 230b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger rmesa->using_hyperz = GL_TRUE; 231b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger } 232b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger 233efd03a278ae55b454509e9659c42899133983ebdKristian Høgsberg if ( sPriv->drm_version.minor >= 15 ) 2344837ea30208d002bc36a836d2117f826d40c8bfaRoland Scheidegger rmesa->texmicrotile = GL_TRUE; 2354837ea30208d002bc36a836d2117f826d40c8bfaRoland Scheidegger 236d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul /* Init default driver functions then plug in our Radeon-specific functions 237d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul * (the texture functions are especially important) 238d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul */ 239d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul _mesa_init_driver_functions( &functions ); 2405170d2452beafc4a6f5859792d6c6b267c549e46Maciej Cencora radeonInitTextureFuncs( &rmesa->radeon, &functions ); 241674835f184b37ad378ce2e35f1a8326af0facc77Dave Airlie radeonInitQueryObjFunctions(&functions); 242d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul 24359b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie if (!radeonInitContext(&rmesa->radeon, &functions, 24459b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie glVisual, driContextPriv, 24559b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie sharedContextPrivate)) { 24659b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie FREE(rmesa); 247e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick *error = __DRI_CTX_ERROR_NO_MEMORY; 24859b183ce0fc8fd8ab73b9321e609fdb3c29bb078Dave Airlie return GL_FALSE; 2495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 2505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 251b584b0728d3a001a142f76dde22f9e8ed7d2dd16Dave Airlie rmesa->radeon.swtcl.RenderIndex = ~0; 2521090d206de011a67d236d8c4ae32d2d42b2f6337Dave Airlie rmesa->radeon.hw.all_dirty = GL_TRUE; 2535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 25425e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger ctx = rmesa->radeon.glCtx; 25525e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger /* Initialize the software rasterizer and helper modules. 25625e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger */ 25725e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger _swrast_CreateContext( ctx ); 25825e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger _vbo_CreateContext( ctx ); 25925e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger _tnl_CreateContext( ctx ); 26025e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger _swsetup_CreateContext( ctx ); 26125e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger _ae_create_context( ctx ); 26225e34c3526e5a999997d8966ede8a11d2deb0122Stefan Dösinger 2635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul /* Set the maximum texture size small enough that we can guarentee that 264e7276b7fa597f7914f7e10a2e50dae36ae50e10bRoland Scheidegger * all texture units can bind a maximal texture and have all of them in 265e7276b7fa597f7914f7e10a2e50dae36ae50e10bRoland Scheidegger * texturable memory at once. Depending on the allow_large_textures driconf 266e7276b7fa597f7914f7e10a2e50dae36ae50e10bRoland Scheidegger * setting allow larger textures. 2675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 2685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2694637235183b80963536f2364e4d50fcb894886ddDave Airlie ctx->Const.MaxTextureUnits = driQueryOptioni (&rmesa->radeon.optionCache, 27030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger "texture_units"); 27130daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits; 27230daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits; 2730943706d35e3955cacbc3b690cfb1e2dfb78d639Pauli Nieminen ctx->Const.MaxCombinedTextureImageUnits = ctx->Const.MaxTextureUnits; 2745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 27526ebf9c5e106962aa440586296b8fde76ef0c76aDave Airlie ctx->Const.StripTextureBorder = GL_TRUE; 27626ebf9c5e106962aa440586296b8fde76ef0c76aDave Airlie 2774637235183b80963536f2364e4d50fcb894886ddDave Airlie i = driQueryOptioni( &rmesa->radeon.optionCache, "allow_large_textures"); 278e7276b7fa597f7914f7e10a2e50dae36ae50e10bRoland Scheidegger 279c696dd0f62c195d71cf7ecbdd04d9b156dd0da0bJerome Glisse /* FIXME: When no memory manager is available we should set this 280c696dd0f62c195d71cf7ecbdd04d9b156dd0da0bJerome Glisse * to some reasonable value based on texture memory pool size */ 28143b3b745e4d893b64d6331cb6183f8615e613f66Roland Scheidegger ctx->Const.MaxTextureLevels = 12; 28243b3b745e4d893b64d6331cb6183f8615e613f66Roland Scheidegger ctx->Const.Max3DTextureLevels = 9; 28343b3b745e4d893b64d6331cb6183f8615e613f66Roland Scheidegger ctx->Const.MaxCubeTextureLevels = 12; 284cdbcb051d93836861bc4d4e1027156111ac249d2Dave Airlie ctx->Const.MaxTextureRectSize = 2048; 285c696dd0f62c195d71cf7ecbdd04d9b156dd0da0bJerome Glisse 2865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MaxTextureMaxAnisotropy = 16.0; 2875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul /* No wide points. 2895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 2905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MinPointSize = 1.0; 2915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MinPointSizeAA = 1.0; 2925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MaxPointSize = 1.0; 2935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MaxPointSizeAA = 1.0; 2945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 2955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MinLineWidth = 1.0; 2965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MinLineWidthAA = 1.0; 2975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MaxLineWidth = 10.0; 2985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MaxLineWidthAA = 10.0; 2995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.LineWidthGranularity = 0.0625; 3005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul /* Set maxlocksize (and hence vb size) small enough to avoid 3025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * fallbacks in radeon_tcl.c. ie. guarentee that all vertices can 3035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * fit in a single dma buffer for indexed rendering of quad strips, 3045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * etc. 3055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 3065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul ctx->Const.MaxArrayLockSize = 3075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul MIN2( ctx->Const.MaxArrayLockSize, 3085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_BUFFER_SIZE / RADEON_MAX_TCL_VERTSIZE ); 3095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 310bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl rmesa->boxes = 0; 3115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3128aa209c766b79144db499063dd1c8482562b07bfIan Romanick ctx->Const.MaxDrawBuffers = 1; 31342026a8ccf4f02d4648d65763e18d8bf98eb9bfdPauli Nieminen ctx->Const.MaxColorAttachments = 1; 31442026a8ccf4f02d4648d65763e18d8bf98eb9bfdPauli Nieminen ctx->Const.MaxRenderbufferSize = 2048; 3158aa209c766b79144db499063dd1c8482562b07bfIan Romanick 3167ce814b25f8c216c7897904cbce7f570112e60efRoland Scheidegger _mesa_set_mvp_with_dp4( ctx, GL_TRUE ); 3177ce814b25f8c216c7897904cbce7f570112e60efRoland Scheidegger 3185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul /* Install the customized pipeline: 3195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 3205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul _tnl_destroy_pipeline( ctx ); 3215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul _tnl_install_pipeline( ctx, radeon_pipeline ); 3225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul /* Try and keep materials and vertices separate: 3245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 32580c88304fc9d09531b2530b74973821e47b46753Keith Whitwell/* _tnl_isolate_materials( ctx, GL_TRUE ); */ 3265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 32704bcaac383cb6d3d5bceb7ecf65ff97c10aa7111Brian Paul /* Configure swrast and T&L to match hardware characteristics: 3285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */ 3295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul _swrast_allow_pixel_fog( ctx, GL_FALSE ); 3305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul _swrast_allow_vertex_fog( ctx, GL_TRUE ); 33104bcaac383cb6d3d5bceb7ecf65ff97c10aa7111Brian Paul _tnl_allow_pixel_fog( ctx, GL_FALSE ); 33204bcaac383cb6d3d5bceb7ecf65ff97c10aa7111Brian Paul _tnl_allow_vertex_fog( ctx, GL_TRUE ); 3335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 33530daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger for ( i = 0 ; i < RADEON_MAX_TEXTURE_UNITS ; i++ ) { 33630daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger _math_matrix_ctr( &rmesa->TexGenMatrix[i] ); 33730daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger _math_matrix_ctr( &rmesa->tmpmat[i] ); 33830daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger _math_matrix_set_identity( &rmesa->TexGenMatrix[i] ); 33930daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger _math_matrix_set_identity( &rmesa->tmpmat[i] ); 34030daa7529331057ecb470efb500152e9c4aa1ae5Roland Scheidegger } 3415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3426fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.ARB_texture_border_clamp = true; 3436fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.ARB_texture_env_combine = true; 3446fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.ARB_texture_env_crossbar = true; 3456fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.ARB_texture_env_dot3 = true; 3466fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.EXT_fog_coord = true; 3476fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.EXT_packed_depth_stencil = true; 3486fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.EXT_secondary_color = true; 3496fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.EXT_texture_env_dot3 = true; 3506fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.EXT_texture_filter_anisotropic = true; 3516fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.EXT_texture_mirror_clamp = true; 3526fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.ATI_texture_env_combine3 = true; 3536fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.ATI_texture_mirror_once = true; 3546fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.MESA_ycbcr_texture = true; 3556fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.NV_blend_square = true; 3566fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick#if FEATURE_OES_EGL_image 3576fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.OES_EGL_image = true; 3586fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick#endif 3596fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick 3600973a1ec78fdedc5401cb1c0f6d027425c492509Eric Anholt ctx->Extensions.EXT_framebuffer_object = true; 3616fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick 36256d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie ctx->Extensions.ARB_texture_cube_map = true; 3636fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick 3644637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.glCtx->Mesa_DXTn) { 3656fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.EXT_texture_compression_s3tc = true; 3666fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.S3_s3tc = true; 367d09209f5530e8bba78e4e0ec62b2027c588cc8f3Eric Anholt } 3684637235183b80963536f2364e4d50fcb894886ddDave Airlie else if (driQueryOptionb (&rmesa->radeon.optionCache, "force_s3tc_enable")) { 3696fb32b4a5fd731fa789d47ed6dcf29991df1e09bIan Romanick ctx->Extensions.EXT_texture_compression_s3tc = true; 370d09209f5530e8bba78e4e0ec62b2027c588cc8f3Eric Anholt } 3715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3720973a1ec78fdedc5401cb1c0f6d027425c492509Eric Anholt ctx->Extensions.NV_texture_rectangle = true; 3730973a1ec78fdedc5401cb1c0f6d027425c492509Eric Anholt ctx->Extensions.ARB_occlusion_query = true; 3745484428d7267388fde868e64531dcdf98b55fafcDave Airlie 375d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul /* XXX these should really go right after _mesa_init_driver_functions() */ 3764bd5ee2d9741a74e28f29e48a4c144206f78fd41Dave Airlie radeon_fbo_init(&rmesa->radeon); 377edbe1fac6a1793da7faca104691a453023d9efacDave Airlie radeonInitSpanFuncs( ctx ); 3785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonInitIoctlFuncs( ctx ); 3790973a1ec78fdedc5401cb1c0f6d027425c492509Eric Anholt radeonInitStateFuncs( ctx ); 3805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonInitState( rmesa ); 3815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul radeonInitSwtcl( ctx ); 3825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 38357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell _mesa_vector4f_alloc( &rmesa->tcl.ObjClean, 0, 38457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell ctx->Const.MaxArrayLockSize, 32 ); 38557c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell 3864637235183b80963536f2364e4d50fcb894886ddDave Airlie fthrottle_mode = driQueryOptioni(&rmesa->radeon.optionCache, "fthrottle_mode"); 3874637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.iw.irq_seq = -1; 3884637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.irqsEmitted = 0; 3894637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.do_irqs = (rmesa->radeon.radeonScreen->irq != 0 && 3904637235183b80963536f2364e4d50fcb894886ddDave Airlie fthrottle_mode == DRI_CONF_FTHROTTLE_IRQS); 3915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3924637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.do_usleeps = (fthrottle_mode == DRI_CONF_FTHROTTLE_USLEEPS); 3935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 3955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#if DO_DEBUG 3965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul RADEON_DEBUG = driParseDebugString( getenv( "RADEON_DEBUG" ), 3975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul debug_control ); 3985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#endif 3995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 4004637235183b80963536f2364e4d50fcb894886ddDave Airlie tcl_mode = driQueryOptioni(&rmesa->radeon.optionCache, "tcl_mode"); 4014637235183b80963536f2364e4d50fcb894886ddDave Airlie if (driQueryOptionb(&rmesa->radeon.optionCache, "no_rast")) { 4025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul fprintf(stderr, "disabling 3D acceleration\n"); 403e2df3d01afaa6919b82962a087056f517bb94193Michel Dänzer FALLBACK(rmesa, RADEON_FALLBACK_DISABLE, 1); 404bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl } else if (tcl_mode == DRI_CONF_TCL_SW || 4054637235183b80963536f2364e4d50fcb894886ddDave Airlie !(rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) { 4064637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL) { 4074637235183b80963536f2364e4d50fcb894886ddDave Airlie rmesa->radeon.radeonScreen->chip_flags &= ~RADEON_CHIPSET_TCL; 408e2df3d01afaa6919b82962a087056f517bb94193Michel Dänzer fprintf(stderr, "Disabling HW TCL support\n"); 409e2df3d01afaa6919b82962a087056f517bb94193Michel Dänzer } 4104637235183b80963536f2364e4d50fcb894886ddDave Airlie TCL_FALLBACK(rmesa->radeon.glCtx, RADEON_TCL_FALLBACK_TCL_DISABLE, 1); 4115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 4125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul 4134637235183b80963536f2364e4d50fcb894886ddDave Airlie if (rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL) { 41480c88304fc9d09531b2530b74973821e47b46753Keith Whitwell/* _tnl_need_dlist_norm_lengths( ctx, GL_FALSE ); */ 4155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul } 416e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick 417e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick _mesa_compute_version(ctx); 418e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick 419e532b6288f01b63d8d8ba8c8dc08292967e65490Ian Romanick *error = __DRI_CTX_ERROR_SUCCESS; 4205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul return GL_TRUE; 4215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul} 422