intel_screen.c revision 3cce4a1e10361458630511543b7a8a6438544775
177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt/************************************************************************** 277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * 377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * All Rights Reserved. 577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * 677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * Permission is hereby granted, free of charge, to any person obtaining a 777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * copy of this software and associated documentation files (the 877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * "Software"), to deal in the Software without restriction, including 977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * without limitation the rights to use, copy, modify, merge, publish, 1077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * distribute, sub license, and/or sell copies of the Software, and to 1177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * permit persons to whom the Software is furnished to do so, subject to 1277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * the following conditions: 1377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * 1477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * The above copyright notice and this permission notice (including the 1577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * next paragraph) shall be included in all copies or substantial portions 1677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * of the Software. 1777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * 1877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * 2677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt **************************************************************************/ 2777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 28ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/glheader.h" 29ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/context.h" 30ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/framebuffer.h" 31ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/renderbuffer.h" 326c244b0f326504ae6add1ddcb407e73c3e72da78Brian Paul 3377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt#include "utils.h" 3477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt#include "xmlpool.h" 3577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 366c244b0f326504ae6add1ddcb407e73c3e72da78Brian Paul#include "intel_batchbuffer.h" 3777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt#include "intel_buffers.h" 386c244b0f326504ae6add1ddcb407e73c3e72da78Brian Paul#include "intel_bufmgr.h" 396c244b0f326504ae6add1ddcb407e73c3e72da78Brian Paul#include "intel_chipset.h" 4077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt#include "intel_fbo.h" 416c244b0f326504ae6add1ddcb407e73c3e72da78Brian Paul#include "intel_screen.h" 426c244b0f326504ae6add1ddcb407e73c3e72da78Brian Paul#include "intel_tex.h" 4377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 44bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt#include "i915_drm.h" 456c244b0f326504ae6add1ddcb407e73c3e72da78Brian Paul 461ba96651e12b3c74fb9c8f5a61b183ef36a27b1eEric Anholt#define DRI_CONF_TEXTURE_TILING(def) \ 471ba96651e12b3c74fb9c8f5a61b183ef36a27b1eEric Anholt DRI_CONF_OPT_BEGIN(texture_tiling, bool, def) \ 481ba96651e12b3c74fb9c8f5a61b183ef36a27b1eEric Anholt DRI_CONF_DESC(en, "Enable texture tiling") \ 491ba96651e12b3c74fb9c8f5a61b183ef36a27b1eEric Anholt DRI_CONF_OPT_END \ 5077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 5177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric AnholtPUBLIC const char __driConfigOptions[] = 52a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_BEGIN 53a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_SECTION_PERFORMANCE 54e9bf3e4cc9a7e4bcd4c45bd707541d26ecdf0409Jesse Barnes DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_ALWAYS_SYNC) 55fe91c05b5494b889c8adda77ff562712116d2e59Eric Anholt /* Options correspond to DRI_CONF_BO_REUSE_DISABLED, 56fe91c05b5494b889c8adda77ff562712116d2e59Eric Anholt * DRI_CONF_BO_REUSE_ALL 57fe91c05b5494b889c8adda77ff562712116d2e59Eric Anholt */ 58f75843a517bd188639e6866db2a7b04de3524e16Dave Airlie DRI_CONF_OPT_BEGIN_V(bo_reuse, enum, 1, "0:1") 59fe91c05b5494b889c8adda77ff562712116d2e59Eric Anholt DRI_CONF_DESC_BEGIN(en, "Buffer object reuse") 60fe91c05b5494b889c8adda77ff562712116d2e59Eric Anholt DRI_CONF_ENUM(0, "Disable buffer object reuse") 61fe91c05b5494b889c8adda77ff562712116d2e59Eric Anholt DRI_CONF_ENUM(1, "Enable reuse of all sizes of buffer objects") 62fe91c05b5494b889c8adda77ff562712116d2e59Eric Anholt DRI_CONF_DESC_END 63fe91c05b5494b889c8adda77ff562712116d2e59Eric Anholt DRI_CONF_OPT_END 641ba96651e12b3c74fb9c8f5a61b183ef36a27b1eEric Anholt 65a962c07cc3e5fba3be5c08071bc7abc5d840f138Eric Anholt#ifdef I915 66a962c07cc3e5fba3be5c08071bc7abc5d840f138Eric Anholt DRI_CONF_TEXTURE_TILING(false) 67a962c07cc3e5fba3be5c08071bc7abc5d840f138Eric Anholt#else 68a962c07cc3e5fba3be5c08071bc7abc5d840f138Eric Anholt DRI_CONF_TEXTURE_TILING(true) 69a962c07cc3e5fba3be5c08071bc7abc5d840f138Eric Anholt#endif 701ba96651e12b3c74fb9c8f5a61b183ef36a27b1eEric Anholt 71b30dc2c66aeaad6661eef515a08a3da89aa07cb2Eric Anholt DRI_CONF_OPT_BEGIN(early_z, bool, false) 72b30dc2c66aeaad6661eef515a08a3da89aa07cb2Eric Anholt DRI_CONF_DESC(en, "Enable early Z in classic mode (unstable, 945-only).") 73b30dc2c66aeaad6661eef515a08a3da89aa07cb2Eric Anholt DRI_CONF_OPT_END 74b30dc2c66aeaad6661eef515a08a3da89aa07cb2Eric Anholt 75862a2a55b35d1dec9224b025a6e7a0cf8593a6a7Eric Anholt DRI_CONF_OPT_BEGIN(fragment_shader, bool, false) 76862a2a55b35d1dec9224b025a6e7a0cf8593a6a7Eric Anholt DRI_CONF_DESC(en, "Enable limited ARB_fragment_shader support on 915/945.") 77862a2a55b35d1dec9224b025a6e7a0cf8593a6a7Eric Anholt DRI_CONF_OPT_END 78862a2a55b35d1dec9224b025a6e7a0cf8593a6a7Eric Anholt 79a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_SECTION_END 80a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_SECTION_QUALITY 81a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_FORCE_S3TC_ENABLE(false) 82acba9c1771d653126fd6f604cb80c050b9e8ffb3Michel Dänzer DRI_CONF_ALLOW_LARGE_TEXTURES(2) 83a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_SECTION_END 84a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_SECTION_DEBUG 85a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_NO_RAST(false) 8640bc2748c2781600c748e546160bcc2aab637825Eric Anholt DRI_CONF_ALWAYS_FLUSH_BATCH(false) 87f3687284c12f34268172b9c60e2effd697162129Eric Anholt DRI_CONF_ALWAYS_FLUSH_CACHE(false) 8881aa5d717bd0098608e9cc292b316293800c7e11Eric Anholt 8981aa5d717bd0098608e9cc292b316293800c7e11Eric Anholt DRI_CONF_OPT_BEGIN(stub_occlusion_query, bool, false) 9081aa5d717bd0098608e9cc292b316293800c7e11Eric Anholt DRI_CONF_DESC(en, "Enable stub ARB_occlusion_query support on 915/945.") 9181aa5d717bd0098608e9cc292b316293800c7e11Eric Anholt DRI_CONF_OPT_END 92a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt DRI_CONF_SECTION_END 93a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric AnholtDRI_CONF_END; 94a0e453a5eca7ed4b57a7f4c1e418d368815e3957Eric Anholt 951e4677a61f0576c32e65e9202fa08e81e1162f65Eric Anholtconst GLuint __driNConfigOptions = 11; 9677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 9777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt#ifdef USE_NEW_INTERFACE 9885063f14ea431b586d710f249563fc73481552c7Eric Anholtstatic PFNGLXCREATECONTEXTMODES create_context_modes = NULL; 9977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt#endif /*USE_NEW_INTERFACE */ 10077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 10177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholtstatic const __DRItexOffsetExtension intelTexOffsetExtension = { 10277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt { __DRI_TEX_OFFSET }, 10377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt intelSetTexOffset, 10477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt}; 10577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 1066d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsbergstatic const __DRItexBufferExtension intelTexBufferExtension = { 1076d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg { __DRI_TEX_BUFFER, __DRI_TEX_BUFFER_VERSION }, 1086d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg intelSetTexBuffer, 10966175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt intelSetTexBuffer2, 1106d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg}; 1116d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 1127c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsbergstatic void 1137c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian HøgsbergintelDRI2Flush(__DRIdrawable *drawable) 1147c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg{ 1157c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg struct intel_context *intel = drawable->driContextPriv->driverPrivate; 1167c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg 1177c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg if (intel->gen < 4) 1187c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg INTEL_FIREVERTICES(intel); 1197c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg 1207c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg if (intel->batch->map != intel->batch->ptr) 1217c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg intel_batchbuffer_flush(intel->batch); 1227c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg} 1237c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg 1247c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsbergstatic void 1257c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian HøgsbergintelDRI2FlushInvalidate(__DRIdrawable *drawable) 1267c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg{ 1277aed23c36288c2b343073d6d06ca0ea167805cd3Eric Anholt struct intel_context *intel = drawable->driContextPriv->driverPrivate; 1287aed23c36288c2b343073d6d06ca0ea167805cd3Eric Anholt 1297aed23c36288c2b343073d6d06ca0ea167805cd3Eric Anholt intel->using_dri2_swapbuffers = GL_TRUE; 1307aed23c36288c2b343073d6d06ca0ea167805cd3Eric Anholt 1317c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg intelDRI2Flush(drawable); 1327c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg drawable->validBuffers = GL_FALSE; 13306d228d8b92b7f4031f0596d498c24c4ed952e68Jesse Barnes 13406d228d8b92b7f4031f0596d498c24c4ed952e68Jesse Barnes intel_update_renderbuffers(intel->driContext, drawable); 1357c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg} 1367c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg 1377c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsbergstatic const struct __DRI2flushExtensionRec intelFlushExtension = { 1387c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg { __DRI2_FLUSH, __DRI2_FLUSH_VERSION }, 1397c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg intelDRI2Flush, 1407c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg intelDRI2FlushInvalidate, 1417c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg}; 1427c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg 143e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstatic const __DRIextension *intelScreenExtensions[] = { 14477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt &driReadDrawableExtension, 14577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt &intelTexOffsetExtension.base, 1466d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg &intelTexBufferExtension.base, 1477c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg &intelFlushExtension.base, 14877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt NULL 14977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt}; 15077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 15124e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsbergstatic GLboolean 152d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsbergintel_get_param(__DRIscreen *psp, int param, int *value) 15324e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg{ 15424e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg int ret; 1551c718c0d78cf4eae9e02b03a0abbec384db948a6Alan Hourihane struct drm_i915_getparam gp; 15624e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg 15724e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg gp.param = param; 15824e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg gp.value = value; 15924e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg 1601c718c0d78cf4eae9e02b03a0abbec384db948a6Alan Hourihane ret = drmCommandWriteRead(psp->fd, DRM_I915_GETPARAM, &gp, sizeof(gp)); 16124e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg if (ret) { 16242e9bde0fa2276b8f5bb434328eea7665794b127Brian Paul _mesa_warning(NULL, "drm_i915_getparam: %d", ret); 16324e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg return GL_FALSE; 16424e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg } 16524e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg 16624e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg return GL_TRUE; 16724e7e457680d700e986fd0b0e0f046fadf67caf4Kristian Høgsberg} 16877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 16977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholtstatic void 170d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian HøgsbergintelDestroyScreen(__DRIscreen * sPriv) 17177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt{ 17277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt intelScreenPrivate *intelScreen = (intelScreenPrivate *) sPriv->private; 17377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 174904f31a62444d9f7e9b12ddafaa4beeb7fed6dfaEric Anholt dri_bufmgr_destroy(intelScreen->bufmgr); 1756d66f23c50ebe8f973757b6fd1b81c9b7920c447Eric Anholt driDestroyOptionInfo(&intelScreen->optionCache); 17677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 17777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt FREE(intelScreen); 17877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt sPriv->private = NULL; 17977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt} 18077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 18177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 18277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt/** 18377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * This is called when we need to set up GL rendering to a new X window. 18477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt */ 18577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholtstatic GLboolean 186d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian HøgsbergintelCreateBuffer(__DRIscreen * driScrnPriv, 187d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIdrawable * driDrawPriv, 18877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt const __GLcontextModes * mesaVis, GLboolean isPixmap) 18977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt{ 190d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg struct intel_renderbuffer *rb; 191d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg 19277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt if (isPixmap) { 19377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt return GL_FALSE; /* not implemented */ 19477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt } 19577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt else { 19677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt GLboolean swStencil = (mesaVis->stencilBits > 0 && 19777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt mesaVis->depthBits != 24); 1984a253431abf43a0638afb43605b44a8742b72a60Brian Paul gl_format rgbFormat; 19977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 200d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg struct gl_framebuffer *fb = CALLOC_STRUCT(gl_framebuffer); 20177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 202d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg if (!fb) 20377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt return GL_FALSE; 20477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 2052ec50d256d49ff3b987459ed42a5dc66f02a6b9dFrancisco Jerez _mesa_initialize_window_framebuffer(fb, mesaVis); 20677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 207119f34e2a52d7e074ea51d49acf6c11d83142cccEric Anholt if (mesaVis->redBits == 5) 2084a253431abf43a0638afb43605b44a8742b72a60Brian Paul rgbFormat = MESA_FORMAT_RGB565; 209119f34e2a52d7e074ea51d49acf6c11d83142cccEric Anholt else if (mesaVis->alphaBits == 0) 210409469fb70682cd819ab405e0f92a4659381cfbeBrian Paul rgbFormat = MESA_FORMAT_XRGB8888; 211119f34e2a52d7e074ea51d49acf6c11d83142cccEric Anholt else 2124a253431abf43a0638afb43605b44a8742b72a60Brian Paul rgbFormat = MESA_FORMAT_ARGB8888; 213119f34e2a52d7e074ea51d49acf6c11d83142cccEric Anholt 21477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt /* setup the hardware-based renderbuffers */ 215d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg rb = intel_create_renderbuffer(rgbFormat); 216d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &rb->Base); 21777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 21877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt if (mesaVis->doubleBufferMode) { 219d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg rb = intel_create_renderbuffer(rgbFormat); 220d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &rb->Base); 22177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt } 22277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 22338c616260a4c14bf5a1d7831e6349c3e8817d14bEric Anholt if (mesaVis->depthBits == 24) { 22438c616260a4c14bf5a1d7831e6349c3e8817d14bEric Anholt if (mesaVis->stencilBits == 8) { 22538c616260a4c14bf5a1d7831e6349c3e8817d14bEric Anholt /* combined depth/stencil buffer */ 22638c616260a4c14bf5a1d7831e6349c3e8817d14bEric Anholt struct intel_renderbuffer *depthStencilRb 2274a253431abf43a0638afb43605b44a8742b72a60Brian Paul = intel_create_renderbuffer(MESA_FORMAT_S8_Z24); 22838c616260a4c14bf5a1d7831e6349c3e8817d14bEric Anholt /* note: bind RB to two attachment points */ 229d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthStencilRb->Base); 230d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg _mesa_add_renderbuffer(fb, BUFFER_STENCIL, &depthStencilRb->Base); 23138c616260a4c14bf5a1d7831e6349c3e8817d14bEric Anholt } else { 23238c616260a4c14bf5a1d7831e6349c3e8817d14bEric Anholt struct intel_renderbuffer *depthRb 2334a253431abf43a0638afb43605b44a8742b72a60Brian Paul = intel_create_renderbuffer(MESA_FORMAT_X8_Z24); 234d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base); 23538c616260a4c14bf5a1d7831e6349c3e8817d14bEric Anholt } 23677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt } 23777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt else if (mesaVis->depthBits == 16) { 23877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt /* just 16-bit depth buffer, no hw stencil */ 23977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt struct intel_renderbuffer *depthRb 2404a253431abf43a0638afb43605b44a8742b72a60Brian Paul = intel_create_renderbuffer(MESA_FORMAT_Z16); 241d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg _mesa_add_renderbuffer(fb, BUFFER_DEPTH, &depthRb->Base); 24277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt } 24377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 24477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt /* now add any/all software-based renderbuffers we may need */ 245d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg _mesa_add_soft_renderbuffers(fb, 24677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt GL_FALSE, /* never sw color */ 24777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt GL_FALSE, /* never sw depth */ 24877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt swStencil, mesaVis->accumRedBits > 0, 24977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt GL_FALSE, /* never sw alpha */ 25077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt GL_FALSE /* never sw aux */ ); 251d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg driDrawPriv->driverPrivate = fb; 25277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 25377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt return GL_TRUE; 25477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt } 25577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt} 25677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 25777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholtstatic void 258d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian HøgsbergintelDestroyBuffer(__DRIdrawable * driDrawPriv) 25977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt{ 260d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg struct gl_framebuffer *fb = driDrawPriv->driverPrivate; 261d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg 262d282128ff68cc58bc3f5b808031c5fe7325bd69bKristian Høgsberg _mesa_reference_framebuffer(&fb, NULL); 26377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt} 26477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 26577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt/* There are probably better ways to do this, such as an 26677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * init-designated function to register chipids and createcontext 26777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt * functions. 26877a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt */ 26977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholtextern GLboolean i830CreateContext(const __GLcontextModes * mesaVis, 270d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIcontext * driContextPriv, 27177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt void *sharedContextPrivate); 27277a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 27377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholtextern GLboolean i915CreateContext(const __GLcontextModes * mesaVis, 274d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIcontext * driContextPriv, 27577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt void *sharedContextPrivate); 276bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholtextern GLboolean brwCreateContext(const __GLcontextModes * mesaVis, 277d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIcontext * driContextPriv, 278bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt void *sharedContextPrivate); 27977a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 28077a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholtstatic GLboolean 28177a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric AnholtintelCreateContext(const __GLcontextModes * mesaVis, 282d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIcontext * driContextPriv, 28377a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt void *sharedContextPrivate) 28477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt{ 285d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIscreen *sPriv = driContextPriv->driScreenPriv; 28677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt intelScreenPrivate *intelScreen = (intelScreenPrivate *) sPriv->private; 28777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 288bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt#ifdef I915 28919420e6c2592e8a31e2ead4bccebc1a9ccca52b1Eric Anholt if (IS_9XX(intelScreen->deviceID)) { 29019420e6c2592e8a31e2ead4bccebc1a9ccca52b1Eric Anholt if (!IS_965(intelScreen->deviceID)) { 29119420e6c2592e8a31e2ead4bccebc1a9ccca52b1Eric Anholt return i915CreateContext(mesaVis, driContextPriv, 292bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt sharedContextPrivate); 29319420e6c2592e8a31e2ead4bccebc1a9ccca52b1Eric Anholt } 294bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt } else { 295cd031749a75883a6fbf8fb7bf989b77a7c705819Dave Airlie intelScreen->no_vbo = GL_TRUE; 29677a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt return i830CreateContext(mesaVis, driContextPriv, sharedContextPrivate); 29777a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt } 298bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt#else 299bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt if (IS_965(intelScreen->deviceID)) 300bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt return brwCreateContext(mesaVis, driContextPriv, sharedContextPrivate); 301bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt#endif 302bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt fprintf(stderr, "Unrecognized deviceID %x\n", intelScreen->deviceID); 303bea6b5fe5aa3138cec8d057766ae48da4aa57deeEric Anholt return GL_FALSE; 30477a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt} 30577a5bcaff43df8d54e0e0ef833726e4b41d7eb36Eric Anholt 3067e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholtstatic GLboolean 3077e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholtintel_init_bufmgr(intelScreenPrivate *intelScreen) 3087e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt{ 309d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg __DRIscreen *spriv = intelScreen->driScrnPriv; 310cb4ef34214d61fb48bdff689a85ea107060e061bEric Anholt int num_fences = 0; 3117e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt 3127e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt intelScreen->no_hw = getenv("INTEL_NO_HW") != NULL; 3137e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt 314827ba44f6ee83ab21c6a2b09323f6f1df4a7d4c8Eric Anholt intelScreen->bufmgr = intel_bufmgr_gem_init(spriv->fd, BATCH_SZ); 3157e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt /* Otherwise, use the classic buffer manager. */ 3167e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt if (intelScreen->bufmgr == NULL) { 317827ba44f6ee83ab21c6a2b09323f6f1df4a7d4c8Eric Anholt fprintf(stderr, "[%s:%u] Error initializing buffer manager.\n", 318827ba44f6ee83ab21c6a2b09323f6f1df4a7d4c8Eric Anholt __func__, __LINE__); 319827ba44f6ee83ab21c6a2b09323f6f1df4a7d4c8Eric Anholt return GL_FALSE; 3207e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt } 3217e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt 322e7aef006e50d0b859c621267af8376f5a0f43445Eric Anholt if (intel_get_param(spriv, I915_PARAM_NUM_FENCES_AVAIL, &num_fences)) 323e7aef006e50d0b859c621267af8376f5a0f43445Eric Anholt intelScreen->kernel_exec_fencing = !!num_fences; 324e7aef006e50d0b859c621267af8376f5a0f43445Eric Anholt else 325e7aef006e50d0b859c621267af8376f5a0f43445Eric Anholt intelScreen->kernel_exec_fencing = GL_FALSE; 326e7aef006e50d0b859c621267af8376f5a0f43445Eric Anholt 3277e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt return GL_TRUE; 3287e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt} 3297e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt 330c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg/** 331c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg * This is the driver specific part of the createNewScreen entry point. 3328d976aedc4654bc66b80f22690e3674f1ef46183Brian Paul * Called when using DRI2. 3338d976aedc4654bc66b80f22690e3674f1ef46183Brian Paul * 334c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg * \return the __GLcontextModes supported by this driver 335c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg */ 336e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstatic const 337d61f07318c8678901b948fdaa8ccdf37aa3203e9Kristian Høgsberg__DRIconfig **intelInitScreen2(__DRIscreen *psp) 338c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg{ 339c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg intelScreenPrivate *intelScreen; 3403ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt GLenum fb_format[3]; 3413ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt GLenum fb_type[3]; 3427c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg 3433ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt static const GLenum back_buffer_modes[] = { 3447c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg GLX_NONE, GLX_SWAP_UNDEFINED_OML, 3457c50d29f7ced3d60e52ee0146d982b49ea421de2Kristian Høgsberg GLX_SWAP_EXCHANGE_OML, GLX_SWAP_COPY_OML 3463ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt }; 347e13593678f62941db06b7ae1a21b81c643371659Brian Paul uint8_t depth_bits[4], stencil_bits[4], msaa_samples_array[1]; 3483ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt int color; 3495d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt __DRIconfig **configs = NULL; 350c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg 351c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg /* Allocate the private area */ 352c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg intelScreen = (intelScreenPrivate *) CALLOC(sizeof(intelScreenPrivate)); 353c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg if (!intelScreen) { 354c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg fprintf(stderr, "\nERROR! Allocating private area failed\n"); 355c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg return GL_FALSE; 356c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg } 357c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg /* parse information in __driConfigOptions */ 358c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg driParseOptionInfo(&intelScreen->optionCache, 359c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg __driConfigOptions, __driNConfigOptions); 360c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg 361c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg intelScreen->driScrnPriv = psp; 362c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg psp->private = (void *) intelScreen; 363c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg 364c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg intelScreen->drmMinor = psp->drm_version.minor; 365c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg 366f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg /* Determine chipset ID */ 367c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg if (!intel_get_param(psp, I915_PARAM_CHIPSET_ID, 368c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg &intelScreen->deviceID)) 369c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg return GL_FALSE; 370c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg 3717e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt if (!intel_init_bufmgr(intelScreen)) 3727e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt return GL_FALSE; 3737e0bbdcf033981282978554c2e68ce48b55aa291Eric Anholt 374f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg intelScreen->irq_active = 1; 375e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg psp->extensions = intelScreenExtensions; 376c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg 377eaf15db895e3a5c6c5ccc2f23a4f0fa522855868Michel Dänzer msaa_samples_array[0] = 0; 378eaf15db895e3a5c6c5ccc2f23a4f0fa522855868Michel Dänzer 3793ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt fb_format[0] = GL_RGB; 3803ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt fb_type[0] = GL_UNSIGNED_SHORT_5_6_5; 3813ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt 38224ff169486e315671c09cd8a57a311a935ccfff5Eric Anholt fb_format[1] = GL_BGR; 3833ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt fb_type[1] = GL_UNSIGNED_INT_8_8_8_8_REV; 3843ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt 38524ff169486e315671c09cd8a57a311a935ccfff5Eric Anholt fb_format[2] = GL_BGRA; 3863ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt fb_type[2] = GL_UNSIGNED_INT_8_8_8_8_REV; 3873ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt 388160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt depth_bits[0] = 0; 389160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt stencil_bits[0] = 0; 390160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt 3913ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt for (color = 0; color < ARRAY_SIZE(fb_format); color++) { 3925d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt __DRIconfig **new_configs; 393160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt int depth_factor; 394160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt 395066f45c7a1888ca8a9de78a81b38af7c74bca9e1Ian Romanick /* Starting with DRI2 protocol version 1.1 we can request a depth/stencil 396066f45c7a1888ca8a9de78a81b38af7c74bca9e1Ian Romanick * buffer that has a diffferent number of bits per pixel than the color 397066f45c7a1888ca8a9de78a81b38af7c74bca9e1Ian Romanick * buffer. This isn't yet supported here. 398160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt */ 399160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt if (fb_type[color] == GL_UNSIGNED_SHORT_5_6_5) { 400160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt depth_bits[1] = 16; 401160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt stencil_bits[1] = 0; 402160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt } else { 403160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt depth_bits[1] = 24; 40473e24cd5a7a0760726a681dda5b88805ddcf1555Ian Romanick stencil_bits[1] = 8; 405160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt } 40673e24cd5a7a0760726a681dda5b88805ddcf1555Ian Romanick 40773e24cd5a7a0760726a681dda5b88805ddcf1555Ian Romanick depth_factor = 2; 40873e24cd5a7a0760726a681dda5b88805ddcf1555Ian Romanick 4095d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt new_configs = driCreateConfigs(fb_format[color], fb_type[color], 4105d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt depth_bits, 4115d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt stencil_bits, 412160c3617fc8867edc445b1ba62fc996c4630cc35Eric Anholt depth_factor, 4135d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt back_buffer_modes, 4145d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt ARRAY_SIZE(back_buffer_modes), 4155d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt msaa_samples_array, 4163cce4a1e10361458630511543b7a8a6438544775Ian Romanick ARRAY_SIZE(msaa_samples_array), 4173cce4a1e10361458630511543b7a8a6438544775Ian Romanick GL_TRUE); 4183ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt if (configs == NULL) 4193ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt configs = new_configs; 4203ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt else 4213ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt configs = driConcatConfigs(configs, new_configs); 4223ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt } 4233ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt 4243ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt if (configs == NULL) { 4253ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__, 4263ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt __LINE__); 4273ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt return NULL; 4283ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt } 4293ee21f30cda27e0ee1357f930163526622ba9434Eric Anholt 4305d5ae371eaeca7e33e638af3aee1ae8e162db0a7Eric Anholt return (const __DRIconfig **)configs; 431c5c73c1b605611faf0f06df9b5d08d8984388238Kristian Høgsberg} 432e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 433e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergconst struct __DriverAPIRec driDriverAPI = { 434e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg .DestroyScreen = intelDestroyScreen, 435e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg .CreateContext = intelCreateContext, 436e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg .DestroyContext = intelDestroyContext, 437e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg .CreateBuffer = intelCreateBuffer, 438e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg .DestroyBuffer = intelDestroyBuffer, 439e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg .MakeCurrent = intelMakeCurrent, 440e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg .UnbindContext = intelUnbindContext, 441e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg .InitScreen2 = intelInitScreen2, 442e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg}; 44339a0e4e7de379a182c1544fa24d5cb2a7687ec72Kristian Høgsberg 44439a0e4e7de379a182c1544fa24d5cb2a7687ec72Kristian Høgsberg/* This is the table of extensions that the loader will dlsym() for. */ 44539a0e4e7de379a182c1544fa24d5cb2a7687ec72Kristian HøgsbergPUBLIC const __DRIextension *__driDriverExtensions[] = { 44639a0e4e7de379a182c1544fa24d5cb2a7687ec72Kristian Høgsberg &driCoreExtension.base, 44739a0e4e7de379a182c1544fa24d5cb2a7687ec72Kristian Høgsberg &driDRI2Extension.base, 44839a0e4e7de379a182c1544fa24d5cb2a7687ec72Kristian Høgsberg NULL 44939a0e4e7de379a182c1544fa24d5cb2a7687ec72Kristian Høgsberg}; 450