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