123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/************************************************************************** 223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 323d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieCopyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and 423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie VA Linux Systems Inc., Fremont, California. 523d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieCopyright (C) The Weather Channel, Inc. 2002. All Rights Reserved. 623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 723d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieThe Weather Channel (TM) funded Tungsten Graphics to develop the 823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlieinitial release of the Radeon 8500 driver under the XFree86 license. 923d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieThis notice must be preserved. 1023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 1123d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieAll Rights Reserved. 1223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 1323d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirliePermission is hereby granted, free of charge, to any person obtaining 1423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliea copy of this software and associated documentation files (the 1523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie"Software"), to deal in the Software without restriction, including 1623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliewithout limitation the rights to use, copy, modify, merge, publish, 1723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliedistribute, sublicense, and/or sell copies of the Software, and to 1823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliepermit persons to whom the Software is furnished to do so, subject to 1923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliethe following conditions: 2023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 2123d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieThe above copyright notice and this permission notice (including the 2223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlienext paragraph) shall be included in all copies or substantial 2323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlieportions of the Software. 2423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 2523d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 2623d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2723d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 2823d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 2923d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 3023d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 3123d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 3223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 3323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie**************************************************************************/ 3423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 3523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#include "radeon_common.h" 3623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#include "xmlpool.h" /* for symbolic values of enum-type options */ 3723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#include "utils.h" 38da9d8f192431b0142e65bceb5ca8a2e52e21ac90Brian Paul#include "drivers/common/meta.h" 39e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie#include "main/context.h" 40f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff#include "main/framebuffer.h" 414ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie#include "main/fbobject.h" 4201daeadf8cd8c56820585c3da88cc626dcdc33d0Michel Dänzer#include "main/renderbuffer.h" 43d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#include "main/state.h" 44e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie#include "main/simple_list.h" 45e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie#include "swrast/swrast.h" 46e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie#include "swrast_setup/swrast_setup.h" 47e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie#include "tnl/tnl.h" 4823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 4923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#ifndef RADEON_DEBUG 5023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlieint RADEON_DEBUG = (0); 5123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#endif 5223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 53c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle 54c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnlestatic const char* get_chip_family_name(int chip_family) 55c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle{ 56c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle switch(chip_family) { 571401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti#if defined(RADEON_R100) 58c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_R100: return "R100"; 59c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV100: return "RV100"; 60c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS100: return "RS100"; 61c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV200: return "RV200"; 62c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS200: return "RS200"; 631401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti#elif defined(RADEON_R200) 64c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_R200: return "R200"; 65c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV250: return "RV250"; 66c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS300: return "RS300"; 67c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV280: return "RV280"; 681401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti#endif 69c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle default: return "unknown"; 70c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle } 71c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle} 72c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle 73c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle 7423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/* Return various strings for glGetString(). 7523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 76f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic const GLubyte *radeonGetString(struct gl_context * ctx, GLenum name) 7723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 7823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonContextPtr radeon = RADEON_CONTEXT(ctx); 7923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie static char buffer[128]; 8023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 8123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie switch (name) { 8223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case GL_VENDOR: 8356d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie return (GLubyte *) "Tungsten Graphics, Inc."; 8423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 8523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case GL_RENDERER: 8623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie { 8723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie unsigned offset; 8823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie GLuint agp_mode = (radeon->radeonScreen->card_type==RADEON_CARD_PCI) ? 0 : 8923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->AGPMode; 90c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle char hardwarename[32]; 9123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 92c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle sprintf(hardwarename, "%s (%s %04X)", 931401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti#if defined(RADEON_R100) 941401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti "R100", 951401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti#elif defined(RADEON_R200) 961401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti "R200", 971401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti#endif 98c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle get_chip_family_name(radeon->radeonScreen->chip_family), 99c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle radeon->radeonScreen->device_id); 10023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 1010fe34b7bbc9a8e089bbb4d0fe401b09095a571ebIan Romanick offset = driGetRendererString(buffer, hardwarename, agp_mode); 10223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 10356d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie sprintf(&buffer[offset], " %sTCL", 10456d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie !(radeon->TclFallback & RADEON_TCL_FALLBACK_TCL_DISABLE) 10556d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie ? "" : "NO-"); 10623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 10756d30bb00d40cd391d7a469604792a27ddcc459cDave Airlie strcat(buffer, " DRI2"); 10823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 10923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return (GLubyte *) buffer; 11023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 11123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 11223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie default: 11323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return NULL; 11423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 11523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 11623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 11723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/* Initialize the driver's misc functions. 11823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 11923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliestatic void radeonInitDriverFuncs(struct dd_function_table *functions) 12023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 12123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie functions->GetString = radeonGetString; 12223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 12323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 12423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/** 12523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * Create and initialize all common fields of the context, 12623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * including the Mesa context itself. 12723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 12823d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieGLboolean radeonInitContext(radeonContextPtr radeon, 12923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie struct dd_function_table* functions, 130d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg const struct gl_config * glVisual, 131d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIcontext * driContextPriv, 13223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie void *sharedContextPrivate) 13323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 134d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIscreen *sPriv = driContextPriv->driScreenPriv; 135875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis radeonScreenPtr screen = (radeonScreenPtr) (sPriv->driverPrivate); 136f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg struct gl_context* ctx; 137f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg struct gl_context* shareCtx; 13823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie int fthrottle_mode; 13923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 14023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* Fill in additional standard functions. */ 14123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonInitDriverFuncs(functions); 14223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 14323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen = screen; 14423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* Allocate and initialize the Mesa context */ 14523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (sharedContextPrivate) 14623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie shareCtx = ((radeonContextPtr)sharedContextPrivate)->glCtx; 14723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie else 14823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie shareCtx = NULL; 1496f2f449414e51e3b98f85e3fc916a7f3d42a99d4Brian Paul radeon->glCtx = _mesa_create_context(API_OPENGL, glVisual, shareCtx, 15023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie functions, (void *)radeon); 15123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!radeon->glCtx) 15223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_FALSE; 15323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 15423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie ctx = radeon->glCtx; 15523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie driContextPriv->driverPrivate = radeon; 15623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 157da9d8f192431b0142e65bceb5ca8a2e52e21ac90Brian Paul _mesa_meta_init(ctx); 158da9d8f192431b0142e65bceb5ca8a2e52e21ac90Brian Paul 15923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* DRI fields */ 16023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.context = driContextPriv; 16123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.screen = sPriv; 16223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.fd = sPriv->fd; 16323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.drmMinor = sPriv->drm_version.minor; 16423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 16523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* Setup IRQs */ 16623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fthrottle_mode = driQueryOptioni(&radeon->optionCache, "fthrottle_mode"); 16723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->iw.irq_seq = -1; 16823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->irqsEmitted = 0; 1691869bdabbac0926c7da8bfd9e22616cab9457126Alex Deucher radeon->do_irqs = (fthrottle_mode == DRI_CONF_FTHROTTLE_IRQS && 1701869bdabbac0926c7da8bfd9e22616cab9457126Alex Deucher radeon->radeonScreen->irq); 17123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 17223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->do_usleeps = (fthrottle_mode == DRI_CONF_FTHROTTLE_USLEEPS); 17323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 17423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!radeon->do_irqs) 17523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, 17623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie "IRQ's not enabled, falling back to %s: %d %d\n", 17723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->do_usleeps ? "usleeps" : "busy waits", 17823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fthrottle_mode, radeon->radeonScreen->irq); 1797dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 1800a725db10c1491539d48370df7207206538bf945Dave Airlie radeon->texture_depth = driQueryOptioni (&radeon->optionCache, 1810a725db10c1491539d48370df7207206538bf945Dave Airlie "texture_depth"); 1820a725db10c1491539d48370df7207206538bf945Dave Airlie if (radeon->texture_depth == DRI_CONF_TEXTURE_DEPTH_FB) 1830a725db10c1491539d48370df7207206538bf945Dave Airlie radeon->texture_depth = ( glVisual->rgbBits > 16 ) ? 1840a725db10c1491539d48370df7207206538bf945Dave Airlie DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16; 18523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 1861401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti radeon->texture_row_align = 32; 1871401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti radeon->texture_rect_row_align = 64; 1881401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti radeon->texture_compressed_row_align = 32; 1890b22615c2c860968a027c04519e25864ae69f6cdMaciej Cencora 190bbf2b5c4ffcb6755d34a5b698445aecf604e45fbPauli Nieminen radeon_init_dma(radeon); 1919ad76e9479c9c3cb8b2947d5144de33bb31197b8Dave Airlie 19223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_TRUE; 19323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 19423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 195e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 196e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 197e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie/** 198e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie * Destroy the command buffer and state atoms. 199e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie */ 200e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airliestatic void radeon_destroy_atom_list(radeonContextPtr radeon) 201e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie{ 202e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie struct radeon_state_atom *atom; 203e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 204e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie foreach(atom, &radeon->hw.atomlist) { 205e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie FREE(atom->cmd); 206e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie if (atom->lastcmd) 207e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie FREE(atom->lastcmd); 208e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie } 209e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 210e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie} 211e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 21223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/** 21323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * Cleanup common context fields. 2141401b96bb9f485eb5c08fb724b4366a16ea93aefFabio Pedretti * Called by r200DestroyContext 21523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 216d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsbergvoid radeonDestroyContext(__DRIcontext *driContextPriv ) 21723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 218d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#ifdef RADEON_BO_TRACK 21923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie FILE *track; 220d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#endif 221e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie GET_CURRENT_CONTEXT(ctx); 222e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie radeonContextPtr radeon = (radeonContextPtr) driContextPriv->driverPrivate; 223e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie radeonContextPtr current = ctx ? RADEON_CONTEXT(ctx) : NULL; 2242a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li 225ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora assert(radeon); 226ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora 227da9d8f192431b0142e65bceb5ca8a2e52e21ac90Brian Paul _mesa_meta_free(radeon->glCtx); 228da9d8f192431b0142e65bceb5ca8a2e52e21ac90Brian Paul 229e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie if (radeon == current) { 230e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie _mesa_make_current(NULL, NULL, NULL); 231e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie } 2327dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 233fef9b532cd1631cc53056b9eba4369d1310b88dfHenri Verbeet radeon_firevertices(radeon); 234ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora if (!is_empty_list(&radeon->dma.reserved)) { 235ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora rcommonFlushCmdBuf( radeon, __FUNCTION__ ); 236ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora } 23723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 238ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora radeonFreeDmaRegions(radeon); 239ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora radeonReleaseArrays(radeon->glCtx, ~0); 240ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora if (radeon->vtbl.free_context) 241ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora radeon->vtbl.free_context(radeon->glCtx); 242ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora _swsetup_DestroyContext( radeon->glCtx ); 243ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora _tnl_DestroyContext( radeon->glCtx ); 244ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora _vbo_DestroyContext( radeon->glCtx ); 245ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora _swrast_DestroyContext( radeon->glCtx ); 246ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora 247ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora /* free atom list */ 248ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora /* free the Mesa context */ 249ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora _mesa_destroy_context(radeon->glCtx); 250ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora 251ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora /* _mesa_destroy_context() might result in calls to functions that 252ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora * depend on the DriverCtx, so don't set it to NULL before. 253ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora * 254ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora * radeon->glCtx->DriverCtx = NULL; 255ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora */ 256ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora /* free the option cache */ 257ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora driDestroyOptionCache(&radeon->optionCache); 258ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora 259ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora rcommonDestroyCmdBuf(radeon); 260ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora 261ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora radeon_destroy_atom_list(radeon); 262ed14a4cb7bbcef45668a3ab6fe8efb267b7c4efdMaciej Cencora 263d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#ifdef RADEON_BO_TRACK 26423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie track = fopen("/tmp/tracklog", "w"); 26523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (track) { 26623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon_tracker_print(&radeon->radeonScreen->bom->tracker, track); 26723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fclose(track); 26823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 269d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#endif 270e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie FREE(radeon); 27123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 27223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 27323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/* Force the context `c' to be unbound from its buffer. 27423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 275d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian HøgsbergGLboolean radeonUnbindContext(__DRIcontext * driContextPriv) 27623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 27723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonContextPtr radeon = (radeonContextPtr) driContextPriv->driverPrivate; 27823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 2794e0d99a63588c67a955f797733da32d04e6f4ee6Pauli Nieminen if (RADEON_DEBUG & RADEON_DRI) 28023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, "%s ctx %p\n", __FUNCTION__, 28123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->glCtx); 28223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 283b4bb6680200b5a898583392f4c831c02f41e63f7Kristian Høgsberg /* Unset current context and dispath table */ 284b4bb6680200b5a898583392f4c831c02f41e63f7Kristian Høgsberg _mesa_make_current(NULL, NULL, NULL); 285b4bb6680200b5a898583392f4c831c02f41e63f7Kristian Høgsberg 28623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_TRUE; 28723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 28823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 28923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 29098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveldstatic unsigned 29198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveldradeon_bits_per_pixel(const struct radeon_renderbuffer *rb) 29298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld{ 293c080202db5363a18a759a9a7c82b40ac558c8abeBrian Paul return _mesa_get_format_bytes(rb->base.Base.Format) * 8; 29498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld} 29523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 296646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner/* 297646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * Check if drawable has been invalidated by dri2InvalidateDrawable(). 298646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * Update renderbuffers if so. This prevents a client from accessing 299646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * a backbuffer that has a swap pending but not yet completed. 300646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * 301646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * See intel_prepare_render for equivalent code in intel driver. 302646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * 303646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner */ 304646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleinervoid radeon_prepare_render(radeonContextPtr radeon) 305646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner{ 306646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner __DRIcontext *driContext = radeon->dri.context; 307646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner __DRIdrawable *drawable; 308646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner __DRIscreen *screen; 309646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner 310646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner screen = driContext->driScreenPriv; 311646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner if (!screen->dri2.loader) 312646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner return; 313646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner 314646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner drawable = driContext->driDrawablePriv; 315646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner if (drawable->dri2.stamp != driContext->dri2.draw_stamp) { 316646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner if (drawable->lastStamp != drawable->dri2.stamp) 317646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner radeon_update_renderbuffers(driContext, drawable, GL_FALSE); 318646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner 319603741a86df0e43c0b52e8c202a35c7fe2fc1d9cDaniel Vetter /* Intel driver does the equivalent of this, no clue if it is needed:*/ 3204ef3e261a4dbe81c1ca73dbf83d45edf332c8d68Andre Maasikas radeon_draw_buffer(radeon->glCtx, radeon->glCtx->DrawBuffer); 321603741a86df0e43c0b52e8c202a35c7fe2fc1d9cDaniel Vetter 322646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner driContext->dri2.draw_stamp = drawable->dri2.stamp; 323646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner } 324646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner 325646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner drawable = driContext->driReadablePriv; 326646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner if (drawable->dri2.stamp != driContext->dri2.read_stamp) { 327646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner if (drawable->lastStamp != drawable->dri2.stamp) 328646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner radeon_update_renderbuffers(driContext, drawable, GL_FALSE); 329646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner driContext->dri2.read_stamp = drawable->dri2.stamp; 330646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner } 331646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner 332646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner /* If we're currently rendering to the front buffer, the rendering 333646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * that will happen next will probably dirty the front buffer. So 334646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * mark it as dirty here. 335646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner */ 336646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner if (radeon->is_front_buffer_rendering) 337646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner radeon->front_buffer_dirty = GL_TRUE; 338646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner} 339646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner 34023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlievoid 341433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzerradeon_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable, 342433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer GLboolean front_only) 34323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 34423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie unsigned int attachments[10]; 3450bfa8dfaaf49703eb5c3237b5cae6201b8755e4dTormod Volden __DRIbuffer *buffers = NULL; 34623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie __DRIscreen *screen; 34723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie struct radeon_renderbuffer *rb; 34823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie int i, count; 3492b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie struct radeon_framebuffer *draw; 35023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonContextPtr radeon; 351bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie char *regname; 352f577c8e462fc924ea436d129ad64c8a1226b5f9cDave Airlie struct radeon_bo *depth_bo = NULL, *bo; 35323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 3544e0d99a63588c67a955f797733da32d04e6f4ee6Pauli Nieminen if (RADEON_DEBUG & RADEON_DRI) 35523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, "enter %s, drawable %p\n", __func__, drawable); 3567dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 35723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie draw = drawable->driverPrivate; 35823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie screen = context->driScreenPriv; 35923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon = (radeonContextPtr) context->driverPrivate; 36098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 361646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner /* Set this up front, so that in case our buffers get invalidated 362646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * while we're getting new buffers, we don't clobber the stamp and 363646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner * thus ignore the invalidate. */ 364646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner drawable->lastStamp = drawable->dri2.stamp; 365646d2e9fbc41bf49075013009e9583bec4a51168Mario Kleiner 3660bfa8dfaaf49703eb5c3237b5cae6201b8755e4dTormod Volden if (screen->dri2.loader 3670bfa8dfaaf49703eb5c3237b5cae6201b8755e4dTormod Volden && (screen->dri2.loader->base.version > 2) 36898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld && (screen->dri2.loader->getBuffersWithFormat != NULL)) { 36998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld struct radeon_renderbuffer *depth_rb; 37098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld struct radeon_renderbuffer *stencil_rb; 37198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 37298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld i = 0; 373433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer if ((front_only || radeon->is_front_buffer_rendering || 374bb4c70358778f28f644ae493b5d8163e76e9fddbDave Airlie radeon->is_front_buffer_reading || 375bb4c70358778f28f644ae493b5d8163e76e9fddbDave Airlie !draw->color_rb[1]) 376bb4c70358778f28f644ae493b5d8163e76e9fddbDave Airlie && draw->color_rb[0]) { 37798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_FRONT_LEFT; 37898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = radeon_bits_per_pixel(draw->color_rb[0]); 37998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 38098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 381433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer if (!front_only) { 382433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer if (draw->color_rb[1]) { 383433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = __DRI_BUFFER_BACK_LEFT; 384433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = radeon_bits_per_pixel(draw->color_rb[1]); 385433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer } 38698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 387433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer depth_rb = radeon_get_renderbuffer(&draw->base, BUFFER_DEPTH); 388433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer stencil_rb = radeon_get_renderbuffer(&draw->base, BUFFER_STENCIL); 389433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer 390433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer if ((depth_rb != NULL) && (stencil_rb != NULL)) { 391433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = __DRI_BUFFER_DEPTH_STENCIL; 392433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = radeon_bits_per_pixel(depth_rb); 393433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer } else if (depth_rb != NULL) { 394433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = __DRI_BUFFER_DEPTH; 395433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = radeon_bits_per_pixel(depth_rb); 396433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer } else if (stencil_rb != NULL) { 397433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = __DRI_BUFFER_STENCIL; 398433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = radeon_bits_per_pixel(stencil_rb); 399433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer } 40098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 40198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 40298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld buffers = (*screen->dri2.loader->getBuffersWithFormat)(drawable, 40398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &drawable->w, 40498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &drawable->h, 40598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments, i / 2, 40698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &count, 40798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld drawable->loaderPrivate); 4080bfa8dfaaf49703eb5c3237b5cae6201b8755e4dTormod Volden } else if (screen->dri2.loader) { 40998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld i = 0; 41098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (draw->color_rb[0]) 41198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_FRONT_LEFT; 412433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer if (!front_only) { 413433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer if (draw->color_rb[1]) 414433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = __DRI_BUFFER_BACK_LEFT; 415433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer if (radeon_get_renderbuffer(&draw->base, BUFFER_DEPTH)) 416433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = __DRI_BUFFER_DEPTH; 417433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer if (radeon_get_renderbuffer(&draw->base, BUFFER_STENCIL)) 418433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer attachments[i++] = __DRI_BUFFER_STENCIL; 419433f0a82f5a4696e6b0c4061f645485ec8079bb4Michel Dänzer } 4207dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 42198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld buffers = (*screen->dri2.loader->getBuffers)(drawable, 42298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &drawable->w, 42398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &drawable->h, 42498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments, i, 42598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &count, 42698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld drawable->loaderPrivate); 42798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 42898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 42923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (buffers == NULL) 43023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return; 43123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 43223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie for (i = 0; i < count; i++) { 43323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie switch (buffers[i].attachment) { 43423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_FRONT_LEFT: 435bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb = draw->color_rb[0]; 436bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie regname = "dri2 front buffer"; 43723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie break; 43898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case __DRI_BUFFER_FAKE_FRONT_LEFT: 43998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld rb = draw->color_rb[0]; 44098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld regname = "dri2 fake front buffer"; 44198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld break; 44223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_BACK_LEFT: 443bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb = draw->color_rb[1]; 444bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie regname = "dri2 back buffer"; 44523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie break; 44623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_DEPTH: 447bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb = radeon_get_renderbuffer(&draw->base, BUFFER_DEPTH); 448bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie regname = "dri2 depth buffer"; 44923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie break; 45098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case __DRI_BUFFER_DEPTH_STENCIL: 45198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld rb = radeon_get_renderbuffer(&draw->base, BUFFER_DEPTH); 45298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld regname = "dri2 depth / stencil buffer"; 45398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld break; 45423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_STENCIL: 4558c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie rb = radeon_get_renderbuffer(&draw->base, BUFFER_STENCIL); 456bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie regname = "dri2 stencil buffer"; 45723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie break; 45823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_ACCUM: 45923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie default: 46023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, 46123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie "unhandled buffer attach event, attacment type %d\n", 46223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie buffers[i].attachment); 46323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return; 46423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 465bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie 466bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie if (rb == NULL) 467bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie continue; 468bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie 469bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie if (rb->bo) { 4708c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie uint32_t name = radeon_gem_name_bo(rb->bo); 4718c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie if (name == buffers[i].name) 4728c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie continue; 473bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie } 4748c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 4754e0d99a63588c67a955f797733da32d04e6f4ee6Pauli Nieminen if (RADEON_DEBUG & RADEON_DRI) 4768c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie fprintf(stderr, 4778c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie "attaching buffer %s, %d, at %d, cpp %d, pitch %d\n", 4788c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie regname, buffers[i].name, buffers[i].attachment, 4798c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie buffers[i].cpp, buffers[i].pitch); 4808c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 481bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb->cpp = buffers[i].cpp; 482bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb->pitch = buffers[i].pitch; 483c080202db5363a18a759a9a7c82b40ac558c8abeBrian Paul rb->base.Base.Width = drawable->w; 484c080202db5363a18a759a9a7c82b40ac558c8abeBrian Paul rb->base.Base.Height = drawable->h; 485bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb->has_surface = 0; 486bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie 4878c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie if (buffers[i].attachment == __DRI_BUFFER_STENCIL && depth_bo) { 4884e0d99a63588c67a955f797733da32d04e6f4ee6Pauli Nieminen if (RADEON_DEBUG & RADEON_DRI) 4898c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie fprintf(stderr, "(reusing depth buffer as stencil)\n"); 4908c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie bo = depth_bo; 4918c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie radeon_bo_ref(bo); 4928c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie } else { 493239c8bfb10d3cd61547ccc460f0b89062f3520bcDave Airlie uint32_t tiling_flags = 0, pitch = 0; 494239c8bfb10d3cd61547ccc460f0b89062f3520bcDave Airlie int ret; 495c3380ded10200f2df0cfba4abbe9a9eb892f7cbbAlex Deucher 4968c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie bo = radeon_bo_open(radeon->radeonScreen->bom, 4978c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie buffers[i].name, 4988c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 0, 4998c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 0, 5008c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie RADEON_GEM_DOMAIN_VRAM, 5018c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie buffers[i].flags); 502c3380ded10200f2df0cfba4abbe9a9eb892f7cbbAlex Deucher 5038c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie if (bo == NULL) { 5048c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie fprintf(stderr, "failed to attach %s %d\n", 5058c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie regname, buffers[i].name); 506ef0720758e5ba34d0d163bdf5efc6e8dabd65aa8Daniel Lichtenberger continue; 5078c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie } 508239c8bfb10d3cd61547ccc460f0b89062f3520bcDave Airlie 509239c8bfb10d3cd61547ccc460f0b89062f3520bcDave Airlie ret = radeon_bo_get_tiling(bo, &tiling_flags, &pitch); 5109954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt if (ret) { 5119954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt fprintf(stderr, 5129954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt "failed to get tiling for %s %d\n", 5139954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt regname, buffers[i].name); 5149954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt radeon_bo_unref(bo); 5159954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt bo = NULL; 5169954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt continue; 5179954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt } else { 5189954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt if (tiling_flags & RADEON_TILING_MACRO) 5199954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt bo->flags |= RADEON_BO_FLAGS_MACRO_TILE; 5209954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt if (tiling_flags & RADEON_TILING_MICRO) 5219954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt bo->flags |= RADEON_BO_FLAGS_MICRO_TILE; 5229954a93ab77e64b01b95837f90a567df9e8c94dfEric Anholt } 523bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie } 5248c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 525d81a48757a9bde35299fd7c3cfbe83885238409aDave Airlie if (buffers[i].attachment == __DRI_BUFFER_DEPTH) { 526d81a48757a9bde35299fd7c3cfbe83885238409aDave Airlie if (draw->base.Visual.depthBits == 16) 527d81a48757a9bde35299fd7c3cfbe83885238409aDave Airlie rb->cpp = 2; 5288c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie depth_bo = bo; 529d81a48757a9bde35299fd7c3cfbe83885238409aDave Airlie } 5308c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 5318c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie radeon_renderbuffer_set_bo(rb, bo); 5328c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie radeon_bo_unref(bo); 53398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 53498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (buffers[i].attachment == __DRI_BUFFER_DEPTH_STENCIL) { 53598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld rb = radeon_get_renderbuffer(&draw->base, BUFFER_STENCIL); 53698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (rb != NULL) { 53798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld struct radeon_bo *stencil_bo = NULL; 53898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 53998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (rb->bo) { 54098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld uint32_t name = radeon_gem_name_bo(rb->bo); 54198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (name == buffers[i].name) 54298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld continue; 54398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 54498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 54598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld stencil_bo = bo; 54698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld radeon_bo_ref(stencil_bo); 54798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld radeon_renderbuffer_set_bo(rb, stencil_bo); 54898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld radeon_bo_unref(stencil_bo); 54998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 55098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 55123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 552bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie 55323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie driUpdateFramebufferSize(radeon->glCtx, drawable); 55423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 55523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 55623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/* Force the context `c' to be the current context and associate with it 55723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * buffer `b'. 55823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 559d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian HøgsbergGLboolean radeonMakeCurrent(__DRIcontext * driContextPriv, 560d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIdrawable * driDrawPriv, 561d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIdrawable * driReadPriv) 56223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 56323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonContextPtr radeon; 5644ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie GET_CURRENT_CONTEXT(curCtx); 565f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff struct gl_framebuffer *drfb, *readfb; 56623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 5674ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie if (driContextPriv) 5684ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie radeon = (radeonContextPtr)driContextPriv->driverPrivate; 5694ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie else 5704ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie radeon = NULL; 5714ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie /* According to the glXMakeCurrent() man page: "Pending commands to 5724ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie * the previous context, if any, are flushed before it is released." 5734ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie * But only flush if we're actually changing contexts. 5744ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie */ 5754ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie 5764ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie if ((radeonContextPtr)curCtx && (radeonContextPtr)curCtx != radeon) { 5774ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie _mesa_flush(curCtx); 5784ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie } 5794ed8a585840865550bb9acac38c5ef26670a1fb8Dave Airlie 58023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!driContextPriv) { 5814e0d99a63588c67a955f797733da32d04e6f4ee6Pauli Nieminen if (RADEON_DEBUG & RADEON_DRI) 58223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, "%s ctx is null\n", __FUNCTION__); 58323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie _mesa_make_current(NULL, NULL, NULL); 58423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_TRUE; 58523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 5862b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie 587f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff if(driDrawPriv == NULL && driReadPriv == NULL) { 588f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff drfb = _mesa_create_framebuffer(&radeon->glCtx->Visual); 589f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff readfb = drfb; 590f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff } 591f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff else { 592f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff drfb = driDrawPriv->driverPrivate; 593f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff readfb = driReadPriv->driverPrivate; 594f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff } 59523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 59603855bc2accbeb508458f70bdbdcef292672b2b8Kristian Høgsberg if(driDrawPriv) 59703855bc2accbeb508458f70bdbdcef292672b2b8Kristian Høgsberg radeon_update_renderbuffers(driContextPriv, driDrawPriv, GL_FALSE); 59803855bc2accbeb508458f70bdbdcef292672b2b8Kristian Høgsberg if (driDrawPriv != driReadPriv) 59903855bc2accbeb508458f70bdbdcef292672b2b8Kristian Høgsberg radeon_update_renderbuffers(driContextPriv, driReadPriv, GL_FALSE); 60003855bc2accbeb508458f70bdbdcef292672b2b8Kristian Høgsberg _mesa_reference_renderbuffer(&radeon->state.color.rb, 601c080202db5363a18a759a9a7c82b40ac558c8abeBrian Paul &(radeon_get_renderbuffer(drfb, BUFFER_BACK_LEFT)->base.Base)); 60203855bc2accbeb508458f70bdbdcef292672b2b8Kristian Høgsberg _mesa_reference_renderbuffer(&radeon->state.depth.rb, 603c080202db5363a18a759a9a7c82b40ac558c8abeBrian Paul &(radeon_get_renderbuffer(drfb, BUFFER_DEPTH)->base.Base)); 60423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 6054e0d99a63588c67a955f797733da32d04e6f4ee6Pauli Nieminen if (RADEON_DEBUG & RADEON_DRI) 6062b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie fprintf(stderr, "%s ctx %p dfb %p rfb %p\n", __FUNCTION__, radeon->glCtx, drfb, readfb); 60723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 608f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff if(driDrawPriv) 609f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff driUpdateFramebufferSize(radeon->glCtx, driDrawPriv); 61023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (driReadPriv != driDrawPriv) 61123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie driUpdateFramebufferSize(radeon->glCtx, driReadPriv); 61223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 613f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff _mesa_make_current(radeon->glCtx, drfb, readfb); 614f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff if (driDrawPriv == NULL && driReadPriv == NULL) 615f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff _mesa_reference_framebuffer(&drfb, NULL); 61623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 6172b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie _mesa_update_state(radeon->glCtx); 61823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 619f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff if (radeon->glCtx->DrawBuffer == drfb) { 620f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff if(driDrawPriv != NULL) { 621f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff radeon_window_moved(radeon); 6222b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie } 6237dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 624f9b5201dbdca4a612afdd694a583177fb4af8685Johann Rudloff radeon_draw_buffer(radeon->glCtx, drfb); 62523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 62623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 62723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 6284e0d99a63588c67a955f797733da32d04e6f4ee6Pauli Nieminen if (RADEON_DEBUG & RADEON_DRI) 62923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, "End %s\n", __FUNCTION__); 6303149b87ac43a5f10983c6682dff7a00cf1d99c7croot 63123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_TRUE; 63223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 63323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 634