1782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell/************************************************************************** 2782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * 3782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * Copyright 2009, VMware, Inc. 4782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * All Rights Reserved. 5782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * 6782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 7782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * copy of this software and associated documentation files (the 8782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * "Software"), to deal in the Software without restriction, including 9782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 10782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 11782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * permit persons to whom the Software is furnished to do so, subject to 12782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * the following conditions: 13782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * 14782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * The above copyright notice and this permission notice (including the 15782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * next paragraph) shall be included in all copies or substantial portions 16782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * of the Software. 17782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * 18782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 211d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell * 26782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell **************************************************************************/ 271d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz/* 281d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * Author: Keith Whitwell <keithw@vmware.com> 291d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz * Author: Jakob Bornecrantz <wallbraker@gmail.com> 301d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz */ 31782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 32782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell#include "utils.h" 33782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell#include "xmlpool.h" 34782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 35782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell#include "dri_screen.h" 36782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 37bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu#include "util/u_inlines.h" 38782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell#include "pipe/p_screen.h" 39ca1f5f7e6c05e34cfe8ef10f29aa19f5547311e6Thomas Hellstrom#include "pipe/p_format.h" 401372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz#include "state_tracker/st_gl_api.h" /* for st_gl_api_create */ 41782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 423584a44270a7f3a04e187bd79b5373314514d383Dave Airlie#include "util/u_debug.h" 433584a44270a7f3a04e187bd79b5373314514d383Dave Airlie 44f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller#define MSAA_VISUAL_MAX_SAMPLES 8 45f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller 4644f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin#undef false 4744f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin 48782eae916d1f02121785448d4ab4759767a46afdKeith WhitwellPUBLIC const char __driConfigOptions[] = 4965bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_BEGIN 5065bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_SECTION_PERFORMANCE 5165bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_FTHROTTLE_MODE(DRI_CONF_FTHROTTLE_IRQS) 5265bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0) 5365bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_SECTION_END 5465bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen 5565bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_SECTION_QUALITY 5665bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen/* DRI_CONF_FORCE_S3TC_ENABLE(false) */ 5765bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_ALLOW_LARGE_TEXTURES(1) 58421235d42ad9921fd45332ec7b33bcee5c1ad33dLauri Kasanen DRI_CONF_PP_CELSHADE(0) 59421235d42ad9921fd45332ec7b33bcee5c1ad33dLauri Kasanen DRI_CONF_PP_NORED(0) 60421235d42ad9921fd45332ec7b33bcee5c1ad33dLauri Kasanen DRI_CONF_PP_NOGREEN(0) 61421235d42ad9921fd45332ec7b33bcee5c1ad33dLauri Kasanen DRI_CONF_PP_NOBLUE(0) 62421235d42ad9921fd45332ec7b33bcee5c1ad33dLauri Kasanen DRI_CONF_PP_JIMENEZMLAA(0, 0, 32) 63421235d42ad9921fd45332ec7b33bcee5c1ad33dLauri Kasanen DRI_CONF_PP_JIMENEZMLAA_COLOR(0, 0, 32) 6465bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_SECTION_END 6544f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin 6644f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin DRI_CONF_SECTION_DEBUG 6744f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN(false) 6844f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin DRI_CONF_SECTION_END 6944f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin 7065bdb878a0afcdffe51716ae4533a04990c7d556Lauri Kasanen DRI_CONF_END; 71782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 7244f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin#define false 0 7344f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlin 7444f69fc82518d343733c77905cf9b9963fe102e4Vadim Girlinstatic const uint __driNConfigOptions = 10; 75782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 765b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzisstatic const __DRIconfig ** 770342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstromdri_fill_in_modes(struct dri_screen *screen, 780342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom unsigned pixel_bits) 79782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell{ 80aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz __DRIconfig **configs = NULL; 8151a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer __DRIconfig **configs_r5g6b5 = NULL; 8251a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer __DRIconfig **configs_a8r8g8b8 = NULL; 8351a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer __DRIconfig **configs_x8r8g8b8 = NULL; 84aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz uint8_t depth_bits_array[5]; 85aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz uint8_t stencil_bits_array[5]; 86f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller uint8_t msaa_samples_array[MSAA_VISUAL_MAX_SAMPLES]; 87782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell unsigned depth_buffer_factor; 88782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell unsigned back_buffer_factor; 89f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller unsigned msaa_samples_factor, msaa_samples_max; 90bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger unsigned i; 911372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz struct pipe_screen *p_screen = screen->base.screen; 92aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz boolean pf_r5g6b5, pf_a8r8g8b8, pf_x8r8g8b8; 93aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz boolean pf_z16, pf_x8z24, pf_z24x8, pf_s8z24, pf_z24s8, pf_z32; 94782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 95782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell static const GLenum back_buffer_modes[] = { 961d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML 97782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell }; 98782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 99782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell depth_bits_array[0] = 0; 1000342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom stencil_bits_array[0] = 0; 1010342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom depth_buffer_factor = 1; 1020342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom 103f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller msaa_samples_max = (screen->st_api->feature_mask & ST_API_FEATURE_MS_VISUALS) 104f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller ? MSAA_VISUAL_MAX_SAMPLES : 1; 105f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller 106c456dd5b4be15b1fe842e03dd40da4505e79e3faJosé Fonseca pf_x8z24 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z24X8_UNORM, 107bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 108e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_DEPTH_STENCIL); 109c456dd5b4be15b1fe842e03dd40da4505e79e3faJosé Fonseca pf_z24x8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_X8Z24_UNORM, 110bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 111e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_DEPTH_STENCIL); 112866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie pf_s8z24 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z24_UNORM_S8_UINT, 113bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 114e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_DEPTH_STENCIL); 115866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie pf_z24s8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_S8_UINT_Z24_UNORM, 116bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 117e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_DEPTH_STENCIL); 118c456dd5b4be15b1fe842e03dd40da4505e79e3faJosé Fonseca pf_a8r8g8b8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_B8G8R8A8_UNORM, 119bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 120e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_RENDER_TARGET); 121c456dd5b4be15b1fe842e03dd40da4505e79e3faJosé Fonseca pf_x8r8g8b8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_B8G8R8X8_UNORM, 122bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 123e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_RENDER_TARGET); 12451a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer pf_r5g6b5 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_B5G6R5_UNORM, 125bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 126e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_RENDER_TARGET); 127aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz 12851a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer /* We can only get a 16 or 32 bit depth buffer with getBuffersWithFormat */ 129d7f78065acb09769195a58303ce3e9a401bf7a43George Sapountzis if (dri_with_format(screen->sPriv)) { 130fd40b9ff32ac0ed02928a2b5516c8d678431806fZack Rusin pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM, 131bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 132e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_DEPTH_STENCIL); 133fd40b9ff32ac0ed02928a2b5516c8d678431806fZack Rusin pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM, 134bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger PIPE_TEXTURE_2D, 0, 135e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_DEPTH_STENCIL); 136fd40b9ff32ac0ed02928a2b5516c8d678431806fZack Rusin } else { 137fd40b9ff32ac0ed02928a2b5516c8d678431806fZack Rusin pf_z16 = FALSE; 138fd40b9ff32ac0ed02928a2b5516c8d678431806fZack Rusin pf_z32 = FALSE; 139fd40b9ff32ac0ed02928a2b5516c8d678431806fZack Rusin } 140fd40b9ff32ac0ed02928a2b5516c8d678431806fZack Rusin 141aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz if (pf_z16) { 1420342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom depth_bits_array[depth_buffer_factor] = 16; 1430342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom stencil_bits_array[depth_buffer_factor++] = 0; 1440342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom } 145aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz if (pf_x8z24 || pf_z24x8) { 1460342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom depth_bits_array[depth_buffer_factor] = 24; 1470342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom stencil_bits_array[depth_buffer_factor++] = 0; 148aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz screen->d_depth_bits_last = pf_x8z24; 1490342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom } 150aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz if (pf_s8z24 || pf_z24s8) { 1510342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom depth_bits_array[depth_buffer_factor] = 24; 1520342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom stencil_bits_array[depth_buffer_factor++] = 8; 153aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz screen->sd_depth_bits_last = pf_s8z24; 154aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz } 155aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz if (pf_z32) { 156aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz depth_bits_array[depth_buffer_factor] = 32; 157aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz stencil_bits_array[depth_buffer_factor++] = 0; 1580342229289c3bd5ed7bc595db4fc88003430209eThomas Hellstrom } 159782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 160782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell msaa_samples_array[0] = 0; 1611d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz back_buffer_factor = 3; 162782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 163f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller /* Also test for color multisample support - just assume it'll work 164f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller * for all depth buffers. 165f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller */ 166bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger if (pf_r5g6b5) { 167bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger msaa_samples_factor = 1; 168f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller for (i = 2; i <= msaa_samples_max; i++) { 169bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger if (p_screen->is_format_supported(p_screen, PIPE_FORMAT_B5G6R5_UNORM, 170f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller PIPE_TEXTURE_2D, i, 171e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_RENDER_TARGET)) { 172f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller msaa_samples_array[msaa_samples_factor] = i; 173bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger msaa_samples_factor++; 174bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 175bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 176782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 17751a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer configs_r5g6b5 = driCreateConfigs(GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 17851a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer depth_bits_array, stencil_bits_array, 17951a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer depth_buffer_factor, back_buffer_modes, 18051a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer back_buffer_factor, 18151a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer msaa_samples_array, msaa_samples_factor, 18251a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer GL_TRUE); 183bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 184bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger 185bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger if (pf_a8r8g8b8) { 186bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger msaa_samples_factor = 1; 187f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller for (i = 2; i <= msaa_samples_max; i++) { 188bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger if (p_screen->is_format_supported(p_screen, PIPE_FORMAT_B8G8R8A8_UNORM, 189f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller PIPE_TEXTURE_2D, i, 190e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_RENDER_TARGET)) { 191f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller msaa_samples_array[msaa_samples_factor] = i; 192bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger msaa_samples_factor++; 193bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 194bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 19551a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer 19651a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer configs_a8r8g8b8 = driCreateConfigs(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 19751a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer depth_bits_array, 19851a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer stencil_bits_array, 19951a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer depth_buffer_factor, 20051a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer back_buffer_modes, 20151a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer back_buffer_factor, 20251a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer msaa_samples_array, 20351a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer msaa_samples_factor, 20451a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer GL_TRUE); 205bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 206bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger 207bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger if (pf_x8r8g8b8) { 208bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger msaa_samples_factor = 1; 209f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller for (i = 2; i <= msaa_samples_max; i++) { 210bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger if (p_screen->is_format_supported(p_screen, PIPE_FORMAT_B8G8R8X8_UNORM, 211f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller PIPE_TEXTURE_2D, i, 212e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_RENDER_TARGET)) { 213f80c2874eca86a12517fbe2f4c15287edfb4dc89Christoph Bumiller msaa_samples_array[msaa_samples_factor] = i; 214bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger msaa_samples_factor++; 215bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 216bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 217aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz 21851a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer configs_x8r8g8b8 = driCreateConfigs(GL_BGR, GL_UNSIGNED_INT_8_8_8_8_REV, 21951a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer depth_bits_array, 22051a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer stencil_bits_array, 22151a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer depth_buffer_factor, 22251a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer back_buffer_modes, 22351a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer back_buffer_factor, 22451a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer msaa_samples_array, 22551a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer msaa_samples_factor, 22651a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer GL_TRUE); 227bf3c8ed481047d0c446d2d3d6d1de82403783fb0Roland Scheidegger } 228aab0bedb8c791531256b9cf4ef165080ccc75e9bJakob Bornecrantz 22951a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer if (pixel_bits == 16) { 23051a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer configs = configs_r5g6b5; 231a4bf68ca50da0ce291a464aec9b03a469ab2561aChad Versace configs = driConcatConfigs(configs, configs_a8r8g8b8); 232a4bf68ca50da0ce291a464aec9b03a469ab2561aChad Versace configs = driConcatConfigs(configs, configs_x8r8g8b8); 23351a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer } else { 23451a51899d0e7eab93468f51296c196b2f3978332Michel Dänzer configs = configs_a8r8g8b8; 235a4bf68ca50da0ce291a464aec9b03a469ab2561aChad Versace configs = driConcatConfigs(configs, configs_x8r8g8b8); 236a4bf68ca50da0ce291a464aec9b03a469ab2561aChad Versace configs = driConcatConfigs(configs, configs_r5g6b5); 237782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell } 238782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 239782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell if (configs == NULL) { 240782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell debug_printf("%s: driCreateConfigs failed\n", __FUNCTION__); 241782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell return NULL; 242782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell } 243782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 24412f66b6dc900b8435416eda8ef82905afce4a91eVinson Lee return (const __DRIconfig **)configs; 245782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell} 246782eae916d1f02121785448d4ab4759767a46afdKeith Whitwell 2471d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz/** 248bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu * Roughly the converse of dri_fill_in_modes. 249bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu */ 250bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wuvoid 251bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wudri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen, 252d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg const struct gl_config *mode) 253bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu{ 254bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu memset(stvis, 0, sizeof(*stvis)); 255bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 2565b6ec5a553876266bfa2ef65081aa1075419b97eChia-I Wu if (!mode) 2575b6ec5a553876266bfa2ef65081aa1075419b97eChia-I Wu return; 2585b6ec5a553876266bfa2ef65081aa1075419b97eChia-I Wu 259bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->samples = mode->samples; 260bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 261bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu if (mode->redBits == 8) { 262bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu if (mode->alphaBits == 8) 263bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->color_format = PIPE_FORMAT_B8G8R8A8_UNORM; 264bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu else 265bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->color_format = PIPE_FORMAT_B8G8R8X8_UNORM; 266bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu } else { 267bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->color_format = PIPE_FORMAT_B5G6R5_UNORM; 268bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu } 269bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 270bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu switch (mode->depthBits) { 271bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu default: 272bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu case 0: 273bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->depth_stencil_format = PIPE_FORMAT_NONE; 274bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu break; 275bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu case 16: 276bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->depth_stencil_format = PIPE_FORMAT_Z16_UNORM; 277bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu break; 278bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu case 24: 279bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu if (mode->stencilBits == 0) { 280bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->depth_stencil_format = (screen->d_depth_bits_last) ? 281bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu PIPE_FORMAT_Z24X8_UNORM: 282bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu PIPE_FORMAT_X8Z24_UNORM; 283bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu } else { 284bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->depth_stencil_format = (screen->sd_depth_bits_last) ? 285866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie PIPE_FORMAT_Z24_UNORM_S8_UINT: 286866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie PIPE_FORMAT_S8_UINT_Z24_UNORM; 287bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu } 288bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu break; 289bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu case 32: 290bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->depth_stencil_format = PIPE_FORMAT_Z32_UNORM; 291bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu break; 292bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu } 293bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 294bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->accum_format = (mode->haveAccumBuffer) ? 295bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu PIPE_FORMAT_R16G16B16A16_SNORM : PIPE_FORMAT_NONE; 296bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 297bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->buffer_mask |= ST_ATTACHMENT_FRONT_LEFT_MASK; 29871fa2270293f7e3aa8e42b397bebb24d3fcd9b1fBenjamin Franzke stvis->render_buffer = ST_ATTACHMENT_FRONT_LEFT; 29971fa2270293f7e3aa8e42b397bebb24d3fcd9b1fBenjamin Franzke if (mode->doubleBufferMode) { 300bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->buffer_mask |= ST_ATTACHMENT_BACK_LEFT_MASK; 30171fa2270293f7e3aa8e42b397bebb24d3fcd9b1fBenjamin Franzke stvis->render_buffer = ST_ATTACHMENT_BACK_LEFT; 30271fa2270293f7e3aa8e42b397bebb24d3fcd9b1fBenjamin Franzke } 303bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu if (mode->stereoMode) { 304bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->buffer_mask |= ST_ATTACHMENT_FRONT_RIGHT_MASK; 305bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu if (mode->doubleBufferMode) 306bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->buffer_mask |= ST_ATTACHMENT_BACK_RIGHT_MASK; 307bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu } 308bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 309bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu if (mode->haveDepthBuffer || mode->haveStencilBuffer) 310bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu stvis->buffer_mask |= ST_ATTACHMENT_DEPTH_STENCIL_MASK; 311bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu /* let the state tracker allocate the accum buffer */ 312bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu} 313bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 3141372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantzstatic boolean 3151372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantzdri_get_egl_image(struct st_manager *smapi, 3164db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz void *egl_image, 3174db0c760195c67f1bc114fdfb8464791030a526cJakob Borncrantz struct st_egl_image *stimg) 3181372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz{ 31917eace581d25a626a7d75d9d1205d012cbb14a6eKristian Høgsberg struct dri_screen *screen = (struct dri_screen *)smapi; 3201372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz __DRIimage *img = NULL; 3211372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz 32217eace581d25a626a7d75d9d1205d012cbb14a6eKristian Høgsberg if (screen->lookup_egl_image) { 32317eace581d25a626a7d75d9d1205d012cbb14a6eKristian Høgsberg img = screen->lookup_egl_image(screen, egl_image); 3241372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz } 3251372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz 3261372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz if (!img) 3271372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz return FALSE; 3281372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz 3291372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz stimg->texture = NULL; 3301372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz pipe_resource_reference(&stimg->texture, img->texture); 3311372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz stimg->level = img->level; 3324c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger stimg->layer = img->layer; 3331372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz 3341372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz return TRUE; 3351372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz} 3361372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz 3375f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantzstatic int 3385f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantzdri_get_param(struct st_manager *smapi, 3395f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz enum st_manager_param param) 3405f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz{ 341a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz struct dri_screen *screen = (struct dri_screen *)smapi; 342a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz 343a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz switch(param) { 344a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz case ST_MANAGER_BROKEN_INVALIDATE: 345a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz return screen->broken_invalidate; 346a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz default: 347a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz return 0; 348a93f9f343a64ce91587af66761399f9d4c180015Jakob Bornecrantz } 3495f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz} 3505f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz 351bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wustatic void 352c049d58a229125ce7ad61c645902eb2638e87194George Sapountzisdri_destroy_option_cache(struct dri_screen * screen) 353c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis{ 354c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis int i; 355c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis 3561d11ba0ba3d3919bdee62a6513bc0c0d1e68aa66Yann Droneaud if (screen->optionCache.info) { 3571d11ba0ba3d3919bdee62a6513bc0c0d1e68aa66Yann Droneaud for (i = 0; i < (1 << screen->optionCache.tableSize); ++i) { 3581d11ba0ba3d3919bdee62a6513bc0c0d1e68aa66Yann Droneaud FREE(screen->optionCache.info[i].name); 3591d11ba0ba3d3919bdee62a6513bc0c0d1e68aa66Yann Droneaud FREE(screen->optionCache.info[i].ranges); 3601d11ba0ba3d3919bdee62a6513bc0c0d1e68aa66Yann Droneaud } 3611d11ba0ba3d3919bdee62a6513bc0c0d1e68aa66Yann Droneaud FREE(screen->optionCache.info); 362c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis } 363c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis 364c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis FREE(screen->optionCache.values); 365c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis} 366c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis 3676a7bd8eb95e7d304725b09272dc9c40a337182e1George Sapountzisvoid 3685b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzisdri_destroy_screen_helper(struct dri_screen * screen) 369bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu{ 3700cd480f07639ec9ee01424aaa3e0c900b2204d4fChia-I Wu if (screen->st_api && screen->st_api->destroy) 3710cd480f07639ec9ee01424aaa3e0c900b2204d4fChia-I Wu screen->st_api->destroy(screen->st_api); 3721372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz 3731372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz if (screen->base.screen) 3741372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz screen->base.screen->destroy(screen->base.screen); 375bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 376c049d58a229125ce7ad61c645902eb2638e87194George Sapountzis dri_destroy_option_cache(screen); 3775b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis} 3785b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis 3792e4ad14a525f4028f0e0a93de2f8db785df33fb7George Sapountzisvoid 3805b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzisdri_destroy_screen(__DRIscreen * sPriv) 3815b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis{ 3825b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis struct dri_screen *screen = dri_screen(sPriv); 3835b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis 3845b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis dri_destroy_screen_helper(screen); 385bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 386bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu FREE(screen); 387875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis sPriv->driverPrivate = NULL; 388bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu sPriv->extensions = NULL; 389bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu} 390bd1ce874728c06d08a1f9881f51edbdd2f1c9db0Chia-I Wu 3915b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzisconst __DRIconfig ** 3925b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzisdri_init_screen_helper(struct dri_screen *screen, 39339c81dada01585a6030f03d215842a1a2ae87d86Jakob Bornecrantz struct pipe_screen *pscreen, 3945b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis unsigned pixel_bits) 3955b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis{ 3961372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz screen->base.screen = pscreen; 3971372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz if (!screen->base.screen) { 3985b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis debug_printf("%s: failed to create pipe_screen\n", __FUNCTION__); 3995b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis return NULL; 4005b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis } 4015b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis 4021372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz screen->base.get_egl_image = dri_get_egl_image; 4035f66363f8ed26d6f3fc8fcccde804fe1fea1bbaaJakob Bornecrantz screen->base.get_param = dri_get_param; 4041372a8f90dc64350e4ac29dbb8c5feb88bc83cd1Jakob Bornecrantz 4050cd480f07639ec9ee01424aaa3e0c900b2204d4fChia-I Wu screen->st_api = st_gl_api_create(); 4060cd480f07639ec9ee01424aaa3e0c900b2204d4fChia-I Wu if (!screen->st_api) 4075b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis return NULL; 4085b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis 4094a5acc0ec7d6d94ea2a73b3d8ee498f75e929a1cLuca Barbieri if(pscreen->get_param(pscreen, PIPE_CAP_NPOT_TEXTURES)) 4104a5acc0ec7d6d94ea2a73b3d8ee498f75e929a1cLuca Barbieri screen->target = PIPE_TEXTURE_2D; 4114a5acc0ec7d6d94ea2a73b3d8ee498f75e929a1cLuca Barbieri else 4124a5acc0ec7d6d94ea2a73b3d8ee498f75e929a1cLuca Barbieri screen->target = PIPE_TEXTURE_RECT; 4134a5acc0ec7d6d94ea2a73b3d8ee498f75e929a1cLuca Barbieri 4145b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis driParseOptionInfo(&screen->optionCache, 4155b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis __driConfigOptions, __driNConfigOptions); 4165b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis 4175b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis return dri_fill_in_modes(screen, pixel_bits); 4185b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis} 4195b07257fdbb5a93f432b8eaf3a41f39b26bdb1f3George Sapountzis 4201d060e36f248b2c1d2575d1e2cbd362b8345ae55Jakob Bornecrantz/* vim: set sw=3 ts=8 sts=3 expandtab: */ 421