radeon_common_context.c revision 1036ef2bf468611d37b5df06fc4424f2002e3837
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" 3823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#include "vblank.h" 39f577c8e462fc924ea436d129ad64c8a1226b5f9cDave Airlie#include "drirenderbuffer.h" 40e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie#include "main/context.h" 416e30fe4873f30ccf9edec9ab6113ea647dccb9b7Dave Airlie#include "main/framebuffer.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#define DRIVER_DATE "20090101" 5023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 5123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#ifndef RADEON_DEBUG 5223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlieint RADEON_DEBUG = (0); 5323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie#endif 5423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 55c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle 56c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnlestatic const char* get_chip_family_name(int chip_family) 57c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle{ 58c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle switch(chip_family) { 59c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_R100: return "R100"; 60c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV100: return "RV100"; 61c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS100: return "RS100"; 62c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV200: return "RV200"; 63c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS200: return "RS200"; 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"; 68c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_R300: return "R300"; 69c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_R350: return "R350"; 70c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV350: return "RV350"; 71c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV380: return "RV380"; 72c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_R420: return "R420"; 73c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV410: return "RV410"; 74c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS400: return "RS400"; 75c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS600: return "RS600"; 76c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS690: return "RS690"; 77c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RS740: return "RS740"; 78c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV515: return "RV515"; 79c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_R520: return "R520"; 80c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV530: return "RV530"; 81c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_R580: return "R580"; 82c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV560: return "RV560"; 83c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle case CHIP_FAMILY_RV570: return "RV570"; 84c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle default: return "unknown"; 85c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle } 86c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle} 87c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle 88c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle 8923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/* Return various strings for glGetString(). 9023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 9123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliestatic const GLubyte *radeonGetString(GLcontext * ctx, GLenum name) 9223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 9323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonContextPtr radeon = RADEON_CONTEXT(ctx); 9423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie static char buffer[128]; 9523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 9623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie switch (name) { 9723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case GL_VENDOR: 984138bdb3b1e845d8a6172015025e1231fda7dcd1Alex Deucher if (IS_R600_CLASS(radeon->radeonScreen)) 994138bdb3b1e845d8a6172015025e1231fda7dcd1Alex Deucher return (GLubyte *) "Advanced Micro Devices, Inc."; 1004138bdb3b1e845d8a6172015025e1231fda7dcd1Alex Deucher else if (IS_R300_CLASS(radeon->radeonScreen)) 10123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return (GLubyte *) "DRI R300 Project"; 10223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie else 10323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return (GLubyte *) "Tungsten Graphics, Inc."; 10423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 10523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case GL_RENDERER: 10623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie { 10723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie unsigned offset; 10823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie GLuint agp_mode = (radeon->radeonScreen->card_type==RADEON_CARD_PCI) ? 0 : 10923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->AGPMode; 110c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle const char* chipclass; 111c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle char hardwarename[32]; 11223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 1134138bdb3b1e845d8a6172015025e1231fda7dcd1Alex Deucher if (IS_R600_CLASS(radeon->radeonScreen)) 1141036ef2bf468611d37b5df06fc4424f2002e3837Alex Deucher chipclass = "R600"; 1154138bdb3b1e845d8a6172015025e1231fda7dcd1Alex Deucher else if (IS_R300_CLASS(radeon->radeonScreen)) 116c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle chipclass = "R300"; 11723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie else if (IS_R200_CLASS(radeon->radeonScreen)) 118c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle chipclass = "R200"; 11923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie else 120c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle chipclass = "R100"; 12123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 122c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle sprintf(hardwarename, "%s (%s %04X)", 123c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle chipclass, 124c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle get_chip_family_name(radeon->radeonScreen->chip_family), 125c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle radeon->radeonScreen->device_id); 12623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 127c1ccc7d5394c23a371540e1b2c3d35b0da3b30d6Nicolai Hähnle offset = driGetRendererString(buffer, hardwarename, DRIVER_DATE, 12823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie agp_mode); 12923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 1304138bdb3b1e845d8a6172015025e1231fda7dcd1Alex Deucher if (IS_R600_CLASS(radeon->radeonScreen)) { 1314138bdb3b1e845d8a6172015025e1231fda7dcd1Alex Deucher sprintf(&buffer[offset], " TCL"); 1324138bdb3b1e845d8a6172015025e1231fda7dcd1Alex Deucher } else if (IS_R300_CLASS(radeon->radeonScreen)) { 13323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie sprintf(&buffer[offset], " %sTCL", 13423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie (radeon->radeonScreen->chip_flags & RADEON_CHIPSET_TCL) 13523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie ? "" : "NO-"); 13623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } else { 13723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie sprintf(&buffer[offset], " %sTCL", 13823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie !(radeon->TclFallback & RADEON_TCL_FALLBACK_TCL_DISABLE) 13923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie ? "" : "NO-"); 14023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 14123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 14223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (radeon->radeonScreen->driScreen->dri2.enabled) 14323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie strcat(buffer, " DRI2"); 14423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 14523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return (GLubyte *) buffer; 14623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 14723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 14823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie default: 14923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return NULL; 15023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 15123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 15223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 15323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/* Initialize the driver's misc functions. 15423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 15523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliestatic void radeonInitDriverFuncs(struct dd_function_table *functions) 15623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 15723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie functions->GetString = radeonGetString; 15823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 15923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 16023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/** 16123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * Create and initialize all common fields of the context, 16223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * including the Mesa context itself. 16323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 16423d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieGLboolean radeonInitContext(radeonContextPtr radeon, 16523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie struct dd_function_table* functions, 16623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie const __GLcontextModes * glVisual, 16723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie __DRIcontextPrivate * driContextPriv, 16823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie void *sharedContextPrivate) 16923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 17023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie __DRIscreenPrivate *sPriv = driContextPriv->driScreenPriv; 17123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonScreenPtr screen = (radeonScreenPtr) (sPriv->private); 17223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie GLcontext* ctx; 17323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie GLcontext* shareCtx; 17423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie int fthrottle_mode; 17523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 17623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* Fill in additional standard functions. */ 17723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonInitDriverFuncs(functions); 17823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 17923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen = screen; 18023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* Allocate and initialize the Mesa context */ 18123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (sharedContextPrivate) 18223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie shareCtx = ((radeonContextPtr)sharedContextPrivate)->glCtx; 18323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie else 18423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie shareCtx = NULL; 18523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->glCtx = _mesa_create_context(glVisual, shareCtx, 18623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie functions, (void *)radeon); 18723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!radeon->glCtx) 18823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_FALSE; 18923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 19023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie ctx = radeon->glCtx; 19123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie driContextPriv->driverPrivate = radeon; 19223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 19323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* DRI fields */ 19423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.context = driContextPriv; 19523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.screen = sPriv; 19623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.hwContext = driContextPriv->hHWContext; 19723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.hwLock = &sPriv->pSAREA->lock; 19823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.fd = sPriv->fd; 19923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->dri.drmMinor = sPriv->drm_version.minor; 20023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 20123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->sarea = (drm_radeon_sarea_t *) ((GLubyte *) sPriv->pSAREA + 20223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie screen->sarea_priv_offset); 20323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 20423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* Setup IRQs */ 20523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fthrottle_mode = driQueryOptioni(&radeon->optionCache, "fthrottle_mode"); 20623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->iw.irq_seq = -1; 20723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->irqsEmitted = 0; 20823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->do_irqs = (fthrottle_mode == DRI_CONF_FTHROTTLE_IRQS && 20923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->irq); 21023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 21123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->do_usleeps = (fthrottle_mode == DRI_CONF_FTHROTTLE_USLEEPS); 21223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 21323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!radeon->do_irqs) 21423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, 21523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie "IRQ's not enabled, falling back to %s: %d %d\n", 21623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->do_usleeps ? "usleeps" : "busy waits", 21723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fthrottle_mode, radeon->radeonScreen->irq); 2187dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 2190a725db10c1491539d48370df7207206538bf945Dave Airlie radeon->texture_depth = driQueryOptioni (&radeon->optionCache, 2200a725db10c1491539d48370df7207206538bf945Dave Airlie "texture_depth"); 2210a725db10c1491539d48370df7207206538bf945Dave Airlie if (radeon->texture_depth == DRI_CONF_TEXTURE_DEPTH_FB) 2220a725db10c1491539d48370df7207206538bf945Dave Airlie radeon->texture_depth = ( glVisual->rgbBits > 16 ) ? 2230a725db10c1491539d48370df7207206538bf945Dave Airlie DRI_CONF_TEXTURE_DEPTH_32 : DRI_CONF_TEXTURE_DEPTH_16; 22423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 2250b22615c2c860968a027c04519e25864ae69f6cdMaciej Cencora radeon->texture_row_align = 32; 2260b22615c2c860968a027c04519e25864ae69f6cdMaciej Cencora 22723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_TRUE; 22823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 22923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 230e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 231e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 232e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie/** 233e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie * Destroy the command buffer and state atoms. 234e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie */ 235e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airliestatic void radeon_destroy_atom_list(radeonContextPtr radeon) 236e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie{ 237e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie struct radeon_state_atom *atom; 238e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 239e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie foreach(atom, &radeon->hw.atomlist) { 240e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie FREE(atom->cmd); 241e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie if (atom->lastcmd) 242e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie FREE(atom->lastcmd); 243e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie } 244e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 245e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie} 246e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 24723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/** 24823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * Cleanup common context fields. 24923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * Called by r200DestroyContext/r300DestroyContext 25023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 251e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlievoid radeonDestroyContext(__DRIcontextPrivate *driContextPriv ) 25223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 253d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#ifdef RADEON_BO_TRACK 25423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie FILE *track; 255d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#endif 256e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie GET_CURRENT_CONTEXT(ctx); 257e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie radeonContextPtr radeon = (radeonContextPtr) driContextPriv->driverPrivate; 258e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie radeonContextPtr current = ctx ? RADEON_CONTEXT(ctx) : NULL; 25923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 2602a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li /* +r6/r7 */ 2612a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li __DRIscreenPrivate *sPriv = driContextPriv->driScreenPriv; 2622a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li radeonScreenPtr screen = (radeonScreenPtr) (sPriv->private); 2632a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li /* --------- */ 2642a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li 265e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie if (radeon == current) { 266e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie radeon_firevertices(radeon); 267e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie _mesa_make_current(NULL, NULL, NULL); 268e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie } 2697dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 270e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie assert(radeon); 2713149b87ac43a5f10983c6682dff7a00cf1d99c7croot if (radeon) 2723149b87ac43a5f10983c6682dff7a00cf1d99c7croot { 27323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 2742a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li#if RADEON_COMMON && defined(RADEON_COMMON_FOR_R600) /* +r6/r7 */ 2752a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li if (IS_R600_CLASS(screen)) 2762a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li { 27717417fc8eeaf5f88452fa3d37a763cee3c92a28cAlex Deucher r600DestroyContext(driContextPriv); 2782a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li } 2792a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li#endif 2802a7a2c6b77116fd475e1d05fb0adbd1702d11f77Richard Li 281e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie if (radeon->dma.current) { 282e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie rcommonFlushCmdBuf( radeon, __FUNCTION__ ); 283e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie } 28423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 28541702160090a4c1325afc07c56682f3e1c4fcaf0Dave Airlie radeonReleaseArrays(radeon->glCtx, ~0); 28623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 287e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie if (radeon->vtbl.free_context) 288e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie radeon->vtbl.free_context(radeon->glCtx); 289e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie _swsetup_DestroyContext( radeon->glCtx ); 290e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie _tnl_DestroyContext( radeon->glCtx ); 291e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie _vbo_DestroyContext( radeon->glCtx ); 292e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie _swrast_DestroyContext( radeon->glCtx ); 293e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 294e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie /* free atom list */ 295e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie /* free the Mesa context */ 296e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie _mesa_destroy_context(radeon->glCtx); 2977dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 298e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie /* _mesa_destroy_context() might result in calls to functions that 299e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie * depend on the DriverCtx, so don't set it to NULL before. 300e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie * 301e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie * radeon->glCtx->DriverCtx = NULL; 302e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie */ 303e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie /* free the option cache */ 304e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie driDestroyOptionCache(&radeon->optionCache); 3057dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 306e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie rcommonDestroyCmdBuf(radeon); 307e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 30817417fc8eeaf5f88452fa3d37a763cee3c92a28cAlex Deucher#if RADEON_COMMON && defined(RADEON_COMMON_FOR_R600) /* +r6/r7 */ 30917417fc8eeaf5f88452fa3d37a763cee3c92a28cAlex Deucher if (!IS_R600_CLASS(screen)) 31017417fc8eeaf5f88452fa3d37a763cee3c92a28cAlex Deucher#endif 311e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie radeon_destroy_atom_list(radeon); 312e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie 313e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie if (radeon->state.scissor.pClipRects) { 314e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie FREE(radeon->state.scissor.pClipRects); 315e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie radeon->state.scissor.pClipRects = 0; 316e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie } 31723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 318d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#ifdef RADEON_BO_TRACK 31923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie track = fopen("/tmp/tracklog", "w"); 32023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (track) { 32123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon_tracker_print(&radeon->radeonScreen->bom->tracker, track); 32223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fclose(track); 32323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 324d513915d27eac8a57ff7f5c1973b4a07fe288c53Dave Airlie#endif 325e00ef43d796f0ae0247b1072bf0aa8cdd8e3034dDave Airlie FREE(radeon); 32623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 32723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 32823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/* Force the context `c' to be unbound from its buffer. 32923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 33023d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieGLboolean radeonUnbindContext(__DRIcontextPrivate * driContextPriv) 33123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 33223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonContextPtr radeon = (radeonContextPtr) driContextPriv->driverPrivate; 33323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 33423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (RADEON_DEBUG & DEBUG_DRI) 33523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, "%s ctx %p\n", __FUNCTION__, 33623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->glCtx); 33723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 33823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_TRUE; 33923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 34023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 34123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 34223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliestatic void 34323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlieradeon_make_kernel_renderbuffer_current(radeonContextPtr radeon, 3442b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie struct radeon_framebuffer *draw) 34523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 34623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* if radeon->fake */ 34723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie struct radeon_renderbuffer *rb; 34823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 3492b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if ((rb = (void *)draw->base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) { 35023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!rb->bo) { 3513149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 3523149b87ac43a5f10983c6682dff7a00cf1d99c7croot rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 3533149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->frontOffset, 3543149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 3553149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 3563149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 3573149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 3583149b87ac43a5f10983c6682dff7a00cf1d99c7croot "Front Buf"); 3593149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 36023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 36123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->frontOffset, 36223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0, 36323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0, 36423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie RADEON_GEM_DOMAIN_VRAM, 36523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0); 3663149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 36723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 36823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->cpp = radeon->radeonScreen->cpp; 36923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->pitch = radeon->radeonScreen->frontPitch * rb->cpp; 37023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 3712b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if ((rb = (void *)draw->base.Attachment[BUFFER_BACK_LEFT].Renderbuffer)) { 37223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!rb->bo) { 3733149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 37423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 37523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->backOffset, 37623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0, 37723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0, 37823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie RADEON_GEM_DOMAIN_VRAM, 3793149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 3803149b87ac43a5f10983c6682dff7a00cf1d99c7croot "Back Buf"); 3813149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 3823149b87ac43a5f10983c6682dff7a00cf1d99c7croot rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 3833149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->backOffset, 3843149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 3853149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 3863149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 38723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0); 3883149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 38923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 39023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->cpp = radeon->radeonScreen->cpp; 39123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->pitch = radeon->radeonScreen->backPitch * rb->cpp; 39223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 3932b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if ((rb = (void *)draw->base.Attachment[BUFFER_DEPTH].Renderbuffer)) { 39423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!rb->bo) { 3953149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 3963149b87ac43a5f10983c6682dff7a00cf1d99c7croot rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 3973149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->depthOffset, 3983149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 3993149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 4003149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 4013149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 4023149b87ac43a5f10983c6682dff7a00cf1d99c7croot "Z Buf"); 4033149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 40423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 40523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->depthOffset, 40623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0, 40723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0, 40823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie RADEON_GEM_DOMAIN_VRAM, 40923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0); 4103149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 41123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 41223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->cpp = radeon->radeonScreen->cpp; 41323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->pitch = radeon->radeonScreen->depthPitch * rb->cpp; 41423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 4152b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if ((rb = (void *)draw->base.Attachment[BUFFER_STENCIL].Renderbuffer)) { 41623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!rb->bo) { 4173149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 4183149b87ac43a5f10983c6682dff7a00cf1d99c7croot rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 4193149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->depthOffset, 4203149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 4213149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 4223149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 4233149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 4243149b87ac43a5f10983c6682dff7a00cf1d99c7croot "Stencil Buf"); 4253149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 42623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 42723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->depthOffset, 42823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0, 42923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0, 43023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie RADEON_GEM_DOMAIN_VRAM, 43123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0); 4323149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 43323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 43423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->cpp = radeon->radeonScreen->cpp; 43523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->pitch = radeon->radeonScreen->depthPitch * rb->cpp; 43623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 43723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 43823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 43923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airliestatic void 44023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlieradeon_make_renderbuffer_current(radeonContextPtr radeon, 4412b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie struct radeon_framebuffer *draw) 44223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 44323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie int size = 4096*4096*4; 44423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* if radeon->fake */ 44523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie struct radeon_renderbuffer *rb; 4467dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 44723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (radeon->radeonScreen->kernel_mm) { 44823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon_make_kernel_renderbuffer_current(radeon, draw); 44923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return; 45023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 4517dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 45223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 4532b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if ((rb = (void *)draw->base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer)) { 45423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!rb->bo) { 4553149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 4563149b87ac43a5f10983c6682dff7a00cf1d99c7croot rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 4573149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->frontOffset + 4583149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->fbLocation, 4593149b87ac43a5f10983c6682dff7a00cf1d99c7croot size, 4603149b87ac43a5f10983c6682dff7a00cf1d99c7croot 4096, 4613149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 4623149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 4633149b87ac43a5f10983c6682dff7a00cf1d99c7croot "Front Buf"); 4643149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 46523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 46623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->frontOffset + 46723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->fbLocation, 46823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie size, 46923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 4096, 47023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie RADEON_GEM_DOMAIN_VRAM, 47123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0); 4723149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 47323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 47423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->cpp = radeon->radeonScreen->cpp; 47523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->pitch = radeon->radeonScreen->frontPitch * rb->cpp; 47623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 4772b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if ((rb = (void *)draw->base.Attachment[BUFFER_BACK_LEFT].Renderbuffer)) { 47823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!rb->bo) { 4793149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 4803149b87ac43a5f10983c6682dff7a00cf1d99c7croot rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 4813149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->backOffset + 4823149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->fbLocation, 4833149b87ac43a5f10983c6682dff7a00cf1d99c7croot size, 4843149b87ac43a5f10983c6682dff7a00cf1d99c7croot 4096, 4853149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 4863149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 4873149b87ac43a5f10983c6682dff7a00cf1d99c7croot "Back Buf"); 4883149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 48923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 49023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->backOffset + 49123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->fbLocation, 49223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie size, 49323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 4096, 49423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie RADEON_GEM_DOMAIN_VRAM, 49523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0); 4963149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 49723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 49823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->cpp = radeon->radeonScreen->cpp; 49923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->pitch = radeon->radeonScreen->backPitch * rb->cpp; 50023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 5012b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if ((rb = (void *)draw->base.Attachment[BUFFER_DEPTH].Renderbuffer)) { 50223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!rb->bo) { 5033149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 50423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 50523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->depthOffset + 50623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->fbLocation, 50723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie size, 50823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 4096, 50923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie RADEON_GEM_DOMAIN_VRAM, 5103149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 5113149b87ac43a5f10983c6682dff7a00cf1d99c7croot "Z Buf"); 5123149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 5133149b87ac43a5f10983c6682dff7a00cf1d99c7croot rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 5143149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->depthOffset + 5153149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->fbLocation, 5163149b87ac43a5f10983c6682dff7a00cf1d99c7croot size, 5173149b87ac43a5f10983c6682dff7a00cf1d99c7croot 4096, 5183149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 51923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0); 5203149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 52123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 52223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->cpp = radeon->radeonScreen->cpp; 52323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->pitch = radeon->radeonScreen->depthPitch * rb->cpp; 52423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 5252b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if ((rb = (void *)draw->base.Attachment[BUFFER_STENCIL].Renderbuffer)) { 52623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!rb->bo) { 5273149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 52823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 52923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->depthOffset + 53023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon->radeonScreen->fbLocation, 53123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie size, 53223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 4096, 53323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie RADEON_GEM_DOMAIN_VRAM, 5343149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 5353149b87ac43a5f10983c6682dff7a00cf1d99c7croot "Stencil Buf"); 5363149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 5373149b87ac43a5f10983c6682dff7a00cf1d99c7croot rb->bo = radeon_bo_open(radeon->radeonScreen->bom, 5383149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->depthOffset + 5393149b87ac43a5f10983c6682dff7a00cf1d99c7croot radeon->radeonScreen->fbLocation, 5403149b87ac43a5f10983c6682dff7a00cf1d99c7croot size, 5413149b87ac43a5f10983c6682dff7a00cf1d99c7croot 4096, 5423149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 54323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 0); 5443149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 54523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 54623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->cpp = radeon->radeonScreen->cpp; 54723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie rb->pitch = radeon->radeonScreen->depthPitch * rb->cpp; 54823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 54923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 55023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 55198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveldstatic unsigned 55298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveldradeon_bits_per_pixel(const struct radeon_renderbuffer *rb) 55398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld{ 55498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld switch (rb->base._ActualFormat) { 55598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case GL_RGB5: 55698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case GL_DEPTH_COMPONENT16: 55798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld return 16; 55898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case GL_RGB8: 55998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case GL_RGBA8: 56098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case GL_DEPTH_COMPONENT24: 56198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case GL_DEPTH24_STENCIL8_EXT: 56298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case GL_STENCIL_INDEX8_EXT: 56398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld return 32; 56498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld default: 56598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld return 0; 56698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 56798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld} 56823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 56923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlievoid 57023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlieradeon_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable) 57123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 57223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie unsigned int attachments[10]; 5730bfa8dfaaf49703eb5c3237b5cae6201b8755e4dTormod Volden __DRIbuffer *buffers = NULL; 57423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie __DRIscreen *screen; 57523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie struct radeon_renderbuffer *rb; 57623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie int i, count; 5772b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie struct radeon_framebuffer *draw; 57823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonContextPtr radeon; 579bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie char *regname; 580f577c8e462fc924ea436d129ad64c8a1226b5f9cDave Airlie struct radeon_bo *depth_bo = NULL, *bo; 58123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 58223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (RADEON_DEBUG & DEBUG_DRI) 58323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, "enter %s, drawable %p\n", __func__, drawable); 5847dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 58523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie draw = drawable->driverPrivate; 58623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie screen = context->driScreenPriv; 58723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon = (radeonContextPtr) context->driverPrivate; 58898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 5890bfa8dfaaf49703eb5c3237b5cae6201b8755e4dTormod Volden if (screen->dri2.loader 5900bfa8dfaaf49703eb5c3237b5cae6201b8755e4dTormod Volden && (screen->dri2.loader->base.version > 2) 59198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld && (screen->dri2.loader->getBuffersWithFormat != NULL)) { 59298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld struct radeon_renderbuffer *depth_rb; 59398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld struct radeon_renderbuffer *stencil_rb; 59498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 59598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld i = 0; 59698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if ((radeon->is_front_buffer_rendering || !draw->color_rb[1]) 59798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld && draw->color_rb[0]) { 59898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_FRONT_LEFT; 59998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = radeon_bits_per_pixel(draw->color_rb[0]); 60098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 60198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 60298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (draw->color_rb[1]) { 60398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_BACK_LEFT; 60498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = radeon_bits_per_pixel(draw->color_rb[1]); 60598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 60698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 60798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld depth_rb = radeon_get_renderbuffer(&draw->base, BUFFER_DEPTH); 60898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld stencil_rb = radeon_get_renderbuffer(&draw->base, BUFFER_STENCIL); 60998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 61098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if ((depth_rb != NULL) && (stencil_rb != NULL)) { 61198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_DEPTH_STENCIL; 61298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = radeon_bits_per_pixel(depth_rb); 61398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } else if (depth_rb != NULL) { 61498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_DEPTH; 61598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = radeon_bits_per_pixel(depth_rb); 61698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } else if (stencil_rb != NULL) { 61798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_STENCIL; 61898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = radeon_bits_per_pixel(stencil_rb); 61998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 62098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 62198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld buffers = (*screen->dri2.loader->getBuffersWithFormat)(drawable, 62298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &drawable->w, 62398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &drawable->h, 62498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments, i / 2, 62598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &count, 62698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld drawable->loaderPrivate); 6270bfa8dfaaf49703eb5c3237b5cae6201b8755e4dTormod Volden } else if (screen->dri2.loader) { 62898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld i = 0; 62998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (draw->color_rb[0]) 63098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_FRONT_LEFT; 63198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (draw->color_rb[1]) 63298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_BACK_LEFT; 63398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (radeon_get_renderbuffer(&draw->base, BUFFER_DEPTH)) 63498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_DEPTH; 63598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (radeon_get_renderbuffer(&draw->base, BUFFER_STENCIL)) 63698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments[i++] = __DRI_BUFFER_STENCIL; 6377dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 63898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld buffers = (*screen->dri2.loader->getBuffers)(drawable, 63998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &drawable->w, 64098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &drawable->h, 64198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld attachments, i, 64298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld &count, 64398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld drawable->loaderPrivate); 64498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 64598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 64623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (buffers == NULL) 64723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return; 64823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 64923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie /* set one cliprect to cover the whole drawable */ 65023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->x = 0; 65123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->y = 0; 65223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->backX = 0; 65323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->backY = 0; 65423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->numClipRects = 1; 65523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->pClipRects[0].x1 = 0; 65623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->pClipRects[0].y1 = 0; 65723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->pClipRects[0].x2 = drawable->w; 65823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->pClipRects[0].y2 = drawable->h; 65923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->numBackClipRects = 1; 66023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->pBackClipRects[0].x1 = 0; 66123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->pBackClipRects[0].y1 = 0; 66223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->pBackClipRects[0].x2 = drawable->w; 66323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie drawable->pBackClipRects[0].y2 = drawable->h; 66423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie for (i = 0; i < count; i++) { 66523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie switch (buffers[i].attachment) { 66623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_FRONT_LEFT: 667bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb = draw->color_rb[0]; 668bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie regname = "dri2 front buffer"; 66923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie break; 67098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case __DRI_BUFFER_FAKE_FRONT_LEFT: 67198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld rb = draw->color_rb[0]; 67298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld regname = "dri2 fake front buffer"; 67398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld break; 67423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_BACK_LEFT: 675bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb = draw->color_rb[1]; 676bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie regname = "dri2 back buffer"; 67723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie break; 67823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_DEPTH: 679bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb = radeon_get_renderbuffer(&draw->base, BUFFER_DEPTH); 680bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie regname = "dri2 depth buffer"; 68123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie break; 68298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld case __DRI_BUFFER_DEPTH_STENCIL: 68398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld rb = radeon_get_renderbuffer(&draw->base, BUFFER_DEPTH); 68498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld regname = "dri2 depth / stencil buffer"; 68598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld break; 68623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_STENCIL: 6878c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie rb = radeon_get_renderbuffer(&draw->base, BUFFER_STENCIL); 688bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie regname = "dri2 stencil buffer"; 68923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie break; 69023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie case __DRI_BUFFER_ACCUM: 69123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie default: 69223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, 69323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie "unhandled buffer attach event, attacment type %d\n", 69423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie buffers[i].attachment); 69523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return; 69623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 697bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie 698bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie if (rb == NULL) 699bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie continue; 700bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie 701bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie if (rb->bo) { 7028c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie uint32_t name = radeon_gem_name_bo(rb->bo); 7038c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie if (name == buffers[i].name) 7048c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie continue; 705bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie } 7068c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 7078c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie if (RADEON_DEBUG & DEBUG_DRI) 7088c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie fprintf(stderr, 7098c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie "attaching buffer %s, %d, at %d, cpp %d, pitch %d\n", 7108c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie regname, buffers[i].name, buffers[i].attachment, 7118c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie buffers[i].cpp, buffers[i].pitch); 7128c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 713bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb->cpp = buffers[i].cpp; 714bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb->pitch = buffers[i].pitch; 715bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb->width = drawable->w; 716bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb->height = drawable->h; 717bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie rb->has_surface = 0; 718bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie 7198c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie if (buffers[i].attachment == __DRI_BUFFER_STENCIL && depth_bo) { 7208c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie if (RADEON_DEBUG & DEBUG_DRI) 7218c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie fprintf(stderr, "(reusing depth buffer as stencil)\n"); 7228c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie bo = depth_bo; 7238c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie radeon_bo_ref(bo); 7248c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie } else { 7253149b87ac43a5f10983c6682dff7a00cf1d99c7croot#ifdef RADEON_DEBUG_BO 7263149b87ac43a5f10983c6682dff7a00cf1d99c7croot bo = radeon_bo_open(radeon->radeonScreen->bom, 7273149b87ac43a5f10983c6682dff7a00cf1d99c7croot buffers[i].name, 7283149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 7293149b87ac43a5f10983c6682dff7a00cf1d99c7croot 0, 7303149b87ac43a5f10983c6682dff7a00cf1d99c7croot RADEON_GEM_DOMAIN_VRAM, 7313149b87ac43a5f10983c6682dff7a00cf1d99c7croot buffers[i].flags, 7323149b87ac43a5f10983c6682dff7a00cf1d99c7croot regname); 7333149b87ac43a5f10983c6682dff7a00cf1d99c7croot#else 7348c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie bo = radeon_bo_open(radeon->radeonScreen->bom, 7358c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie buffers[i].name, 7368c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 0, 7378c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 0, 7388c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie RADEON_GEM_DOMAIN_VRAM, 7398c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie buffers[i].flags); 7403149b87ac43a5f10983c6682dff7a00cf1d99c7croot#endif /* RADEON_DEBUG_BO */ 7418c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie if (bo == NULL) { 7428c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 7438c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie fprintf(stderr, "failed to attach %s %d\n", 7448c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie regname, buffers[i].name); 7457dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 7468c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie } 747bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie } 7488c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 749d81a48757a9bde35299fd7c3cfbe83885238409aDave Airlie if (buffers[i].attachment == __DRI_BUFFER_DEPTH) { 750d81a48757a9bde35299fd7c3cfbe83885238409aDave Airlie if (draw->base.Visual.depthBits == 16) 751d81a48757a9bde35299fd7c3cfbe83885238409aDave Airlie rb->cpp = 2; 7528c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie depth_bo = bo; 753d81a48757a9bde35299fd7c3cfbe83885238409aDave Airlie } 7548c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie 7558c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie radeon_renderbuffer_set_bo(rb, bo); 7568c7e30fb950c83f5e9e29e60735e999ac608145aDave Airlie radeon_bo_unref(bo); 75798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 75898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (buffers[i].attachment == __DRI_BUFFER_DEPTH_STENCIL) { 75998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld rb = radeon_get_renderbuffer(&draw->base, BUFFER_STENCIL); 76098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (rb != NULL) { 76198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld struct radeon_bo *stencil_bo = NULL; 76298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 76398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (rb->bo) { 76498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld uint32_t name = radeon_gem_name_bo(rb->bo); 76598bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld if (name == buffers[i].name) 76698bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld continue; 76798bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 76898bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld 76998bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld stencil_bo = bo; 77098bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld radeon_bo_ref(stencil_bo); 77198bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld radeon_renderbuffer_set_bo(rb, stencil_bo); 77298bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld radeon_bo_unref(stencil_bo); 77398bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 77498bb5c610dc68d8e9a185216ce9d2dc6d278c114Joel Bosveld } 77523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 776bdaa0341caffc353fd26bbd91865c2d86eed11c1Dave Airlie 77723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie driUpdateFramebufferSize(radeon->glCtx, drawable); 77823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 77923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 78023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie/* Force the context `c' to be the current context and associate with it 78123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie * buffer `b'. 78223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie */ 78323d3559bd4ece1fcab5513ebdaa38600d6654374Dave AirlieGLboolean radeonMakeCurrent(__DRIcontextPrivate * driContextPriv, 78423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie __DRIdrawablePrivate * driDrawPriv, 78523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie __DRIdrawablePrivate * driReadPriv) 78623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie{ 78723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeonContextPtr radeon; 7882b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie struct radeon_framebuffer *drfb; 7892b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie struct gl_framebuffer *readfb; 79023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 79123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (!driContextPriv) { 79223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (RADEON_DEBUG & DEBUG_DRI) 79323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, "%s ctx is null\n", __FUNCTION__); 79423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie _mesa_make_current(NULL, NULL, NULL); 79523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_TRUE; 79623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 7972b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie 79823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon = (radeonContextPtr) driContextPriv->driverPrivate; 7992b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie drfb = driDrawPriv->driverPrivate; 8002b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie readfb = driReadPriv->driverPrivate; 80123d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 8027dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle if (driContextPriv->driScreenPriv->dri2.enabled) { 80323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon_update_renderbuffers(driContextPriv, driDrawPriv); 80423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (driDrawPriv != driReadPriv) 80523d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie radeon_update_renderbuffers(driContextPriv, driReadPriv); 80601daeadf8cd8c56820585c3da88cc626dcdc33d0Michel Dänzer _mesa_reference_renderbuffer(&radeon->state.color.rb, 80701daeadf8cd8c56820585c3da88cc626dcdc33d0Michel Dänzer &(radeon_get_renderbuffer(&drfb->base, BUFFER_BACK_LEFT)->base)); 80801daeadf8cd8c56820585c3da88cc626dcdc33d0Michel Dänzer _mesa_reference_renderbuffer(&radeon->state.depth.rb, 80901daeadf8cd8c56820585c3da88cc626dcdc33d0Michel Dänzer &(radeon_get_renderbuffer(&drfb->base, BUFFER_DEPTH)->base)); 81023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } else { 8112b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie radeon_make_renderbuffer_current(radeon, drfb); 81223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 81323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 81423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (RADEON_DEBUG & DEBUG_DRI) 8152b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie fprintf(stderr, "%s ctx %p dfb %p rfb %p\n", __FUNCTION__, radeon->glCtx, drfb, readfb); 81623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 81723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie driUpdateFramebufferSize(radeon->glCtx, driDrawPriv); 81823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (driReadPriv != driDrawPriv) 81923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie driUpdateFramebufferSize(radeon->glCtx, driReadPriv); 82023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 8212b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie _mesa_make_current(radeon->glCtx, &drfb->base, readfb); 82223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 8232b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie _mesa_update_state(radeon->glCtx); 82423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 8252b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie if (radeon->glCtx->DrawBuffer == &drfb->base) { 8267dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle if (driDrawPriv->swap_interval == (unsigned)-1) { 8277dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle int i; 8287dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle driDrawPriv->vblFlags = 8297dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle (radeon->radeonScreen->irq != 0) 8307dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle ? driGetDefaultVBlankFlags(&radeon-> 8317dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle optionCache) 8327dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle : VBLANK_FLAG_NO_IRQ; 8337dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 8347dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle driDrawableInitVBlank(driDrawPriv); 8357dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle drfb->vbl_waited = driDrawPriv->vblSeq; 8367dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 8377dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle for (i = 0; i < 2; i++) { 8387dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle if (drfb->color_rb[i]) 8397dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle drfb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq; 8402b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie } 8417dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 8422b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie } 8437dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle 8447dd184dc4da37233471875df6f40cce0560cb7bcNicolai Hähnle radeon_window_moved(radeon); 8452b85fccae5ba33748846f74f90fe0f72c673a4b1Dave Airlie radeon_draw_buffer(radeon->glCtx, &drfb->base); 84623d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie } 84723d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 84823d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 84923d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie if (RADEON_DEBUG & DEBUG_DRI) 85023d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie fprintf(stderr, "End %s\n", __FUNCTION__); 8513149b87ac43a5f10983c6682dff7a00cf1d99c7croot 85223d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie return GL_TRUE; 85323d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie} 85423d3559bd4ece1fcab5513ebdaa38600d6654374Dave Airlie 855