1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2009, VMware, Inc. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Author: Keith Whitwell <keithw@vmware.com> 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Author: Jakob Bornecrantz <wallbraker@gmail.com> 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "utils.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "xmlpool.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "dri_screen.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_inlines.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_screen.h" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_format.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "state_tracker/st_gl_api.h" /* for st_gl_api_create */ 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_debug.h" 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MSAA_VISUAL_MAX_SAMPLES 8 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef false 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC const char __driConfigOptions[] = 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_BEGIN 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_SECTION_PERFORMANCE 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_FTHROTTLE_MODE(DRI_CONF_FTHROTTLE_IRQS) 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_0) 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_SECTION_END 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_SECTION_QUALITY 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* DRI_CONF_FORCE_S3TC_ENABLE(false) */ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_ALLOW_LARGE_TEXTURES(1) 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_PP_CELSHADE(0) 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_PP_NORED(0) 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_PP_NOGREEN(0) 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_PP_NOBLUE(0) 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_PP_JIMENEZMLAA(0, 0, 32) 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_PP_JIMENEZMLAA_COLOR(0, 0, 32) 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_SECTION_END 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_SECTION_DEBUG 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_FORCE_GLSL_EXTENSIONS_WARN(false) 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_SECTION_END 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DRI_CONF_END; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define false 0 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const uint __driNConfigOptions = 10; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const __DRIconfig ** 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdri_fill_in_modes(struct dri_screen *screen, 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pixel_bits) 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __DRIconfig **configs = NULL; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __DRIconfig **configs_r5g6b5 = NULL; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __DRIconfig **configs_a8r8g8b8 = NULL; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __DRIconfig **configs_x8r8g8b8 = NULL; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t depth_bits_array[5]; 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t stencil_bits_array[5]; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t msaa_samples_array[MSAA_VISUAL_MAX_SAMPLES]; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned depth_buffer_factor; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned back_buffer_factor; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned msaa_samples_factor, msaa_samples_max; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_screen *p_screen = screen->base.screen; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean pf_r5g6b5, pf_a8r8g8b8, pf_x8r8g8b8; 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean pf_z16, pf_x8z24, pf_z24x8, pf_s8z24, pf_z24s8, pf_z32; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static const GLenum back_buffer_modes[] = { 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_bits_array[0] = 0; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_bits_array[0] = 0; 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_buffer_factor = 1; 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_max = (screen->st_api->feature_mask & ST_API_FEATURE_MS_VISUALS) 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? MSAA_VISUAL_MAX_SAMPLES : 1; 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_x8z24 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z24X8_UNORM, 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_DEPTH_STENCIL); 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_z24x8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_X8Z24_UNORM, 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_DEPTH_STENCIL); 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_s8z24 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z24_UNORM_S8_UINT, 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_DEPTH_STENCIL); 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_z24s8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_S8_UINT_Z24_UNORM, 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_DEPTH_STENCIL); 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_a8r8g8b8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_B8G8R8A8_UNORM, 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_RENDER_TARGET); 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_x8r8g8b8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_B8G8R8X8_UNORM, 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_RENDER_TARGET); 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_r5g6b5 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_B5G6R5_UNORM, 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_RENDER_TARGET); 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* We can only get a 16 or 32 bit depth buffer with getBuffersWithFormat */ 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dri_with_format(screen->sPriv)) { 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM, 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_DEPTH_STENCIL); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM, 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_DEPTH_STENCIL); 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_z16 = FALSE; 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pf_z32 = FALSE; 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pf_z16) { 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_bits_array[depth_buffer_factor] = 16; 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_bits_array[depth_buffer_factor++] = 0; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pf_x8z24 || pf_z24x8) { 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_bits_array[depth_buffer_factor] = 24; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_bits_array[depth_buffer_factor++] = 0; 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->d_depth_bits_last = pf_x8z24; 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pf_s8z24 || pf_z24s8) { 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_bits_array[depth_buffer_factor] = 24; 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_bits_array[depth_buffer_factor++] = 8; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->sd_depth_bits_last = pf_s8z24; 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pf_z32) { 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_bits_array[depth_buffer_factor] = 32; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_bits_array[depth_buffer_factor++] = 0; 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_array[0] = 0; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org back_buffer_factor = 3; 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Also test for color multisample support - just assume it'll work 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for all depth buffers. 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pf_r5g6b5) { 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_factor = 1; 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 2; i <= msaa_samples_max; i++) { 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (p_screen->is_format_supported(p_screen, PIPE_FORMAT_B5G6R5_UNORM, 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, i, 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_RENDER_TARGET)) { 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_array[msaa_samples_factor] = i; 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_factor++; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs_r5g6b5 = driCreateConfigs(GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_bits_array, stencil_bits_array, 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_buffer_factor, back_buffer_modes, 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org back_buffer_factor, 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_array, msaa_samples_factor, 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_TRUE); 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pf_a8r8g8b8) { 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_factor = 1; 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 2; i <= msaa_samples_max; i++) { 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (p_screen->is_format_supported(p_screen, PIPE_FORMAT_B8G8R8A8_UNORM, 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, i, 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_RENDER_TARGET)) { 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_array[msaa_samples_factor] = i; 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_factor++; 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs_a8r8g8b8 = driCreateConfigs(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_bits_array, 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_bits_array, 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_buffer_factor, 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org back_buffer_modes, 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org back_buffer_factor, 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_array, 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_factor, 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_TRUE); 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pf_x8r8g8b8) { 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_factor = 1; 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 2; i <= msaa_samples_max; i++) { 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (p_screen->is_format_supported(p_screen, PIPE_FORMAT_B8G8R8X8_UNORM, 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, i, 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_RENDER_TARGET)) { 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_array[msaa_samples_factor] = i; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_factor++; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs_x8r8g8b8 = driCreateConfigs(GL_BGR, GL_UNSIGNED_INT_8_8_8_8_REV, 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_bits_array, 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_bits_array, 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_buffer_factor, 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org back_buffer_modes, 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org back_buffer_factor, 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_array, 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org msaa_samples_factor, 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_TRUE); 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pixel_bits == 16) { 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs = configs_r5g6b5; 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs = driConcatConfigs(configs, configs_a8r8g8b8); 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs = driConcatConfigs(configs, configs_x8r8g8b8); 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs = configs_a8r8g8b8; 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs = driConcatConfigs(configs, configs_x8r8g8b8); 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs = driConcatConfigs(configs, configs_r5g6b5); 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (configs == NULL) { 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s: driCreateConfigs failed\n", __FUNCTION__); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (const __DRIconfig **)configs; 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Roughly the converse of dri_fill_in_modes. 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen, 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_config *mode) 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(stvis, 0, sizeof(*stvis)); 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!mode) 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->samples = mode->samples; 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode->redBits == 8) { 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode->alphaBits == 8) 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->color_format = PIPE_FORMAT_B8G8R8A8_UNORM; 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->color_format = PIPE_FORMAT_B8G8R8X8_UNORM; 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->color_format = PIPE_FORMAT_B5G6R5_UNORM; 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (mode->depthBits) { 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0: 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->depth_stencil_format = PIPE_FORMAT_NONE; 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 16: 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->depth_stencil_format = PIPE_FORMAT_Z16_UNORM; 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 24: 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode->stencilBits == 0) { 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->depth_stencil_format = (screen->d_depth_bits_last) ? 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_Z24X8_UNORM: 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_X8Z24_UNORM; 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->depth_stencil_format = (screen->sd_depth_bits_last) ? 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_Z24_UNORM_S8_UINT: 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_S8_UINT_Z24_UNORM; 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 32: 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->depth_stencil_format = PIPE_FORMAT_Z32_UNORM; 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->accum_format = (mode->haveAccumBuffer) ? 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_R16G16B16A16_SNORM : PIPE_FORMAT_NONE; 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->buffer_mask |= ST_ATTACHMENT_FRONT_LEFT_MASK; 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->render_buffer = ST_ATTACHMENT_FRONT_LEFT; 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode->doubleBufferMode) { 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->buffer_mask |= ST_ATTACHMENT_BACK_LEFT_MASK; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->render_buffer = ST_ATTACHMENT_BACK_LEFT; 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode->stereoMode) { 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->buffer_mask |= ST_ATTACHMENT_FRONT_RIGHT_MASK; 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode->doubleBufferMode) 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->buffer_mask |= ST_ATTACHMENT_BACK_RIGHT_MASK; 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mode->haveDepthBuffer || mode->haveStencilBuffer) 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stvis->buffer_mask |= ST_ATTACHMENT_DEPTH_STENCIL_MASK; 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* let the state tracker allocate the accum buffer */ 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdri_get_egl_image(struct st_manager *smapi, 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *egl_image, 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct st_egl_image *stimg) 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dri_screen *screen = (struct dri_screen *)smapi; 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __DRIimage *img = NULL; 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (screen->lookup_egl_image) { 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org img = screen->lookup_egl_image(screen, egl_image); 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!img) 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stimg->texture = NULL; 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_resource_reference(&stimg->texture, img->texture); 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stimg->level = img->level; 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stimg->layer = img->layer; 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdri_get_param(struct st_manager *smapi, 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum st_manager_param param) 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dri_screen *screen = (struct dri_screen *)smapi; 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch(param) { 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case ST_MANAGER_BROKEN_INVALIDATE: 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return screen->broken_invalidate; 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdri_destroy_option_cache(struct dri_screen * screen) 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (screen->optionCache.info) { 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < (1 << screen->optionCache.tableSize); ++i) { 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(screen->optionCache.info[i].name); 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(screen->optionCache.info[i].ranges); 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(screen->optionCache.info); 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(screen->optionCache.values); 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdri_destroy_screen_helper(struct dri_screen * screen) 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (screen->st_api && screen->st_api->destroy) 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->st_api->destroy(screen->st_api); 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (screen->base.screen) 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->base.screen->destroy(screen->base.screen); 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dri_destroy_option_cache(screen); 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdri_destroy_screen(__DRIscreen * sPriv) 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct dri_screen *screen = dri_screen(sPriv); 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dri_destroy_screen_helper(screen); 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(screen); 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sPriv->driverPrivate = NULL; 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sPriv->extensions = NULL; 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst __DRIconfig ** 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdri_init_screen_helper(struct dri_screen *screen, 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_screen *pscreen, 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pixel_bits) 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->base.screen = pscreen; 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!screen->base.screen) { 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s: failed to create pipe_screen\n", __FUNCTION__); 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->base.get_egl_image = dri_get_egl_image; 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->base.get_param = dri_get_param; 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->st_api = st_gl_api_create(); 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!screen->st_api) 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if(pscreen->get_param(pscreen, PIPE_CAP_NPOT_TEXTURES)) 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->target = PIPE_TEXTURE_2D; 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen->target = PIPE_TEXTURE_RECT; 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org driParseOptionInfo(&screen->optionCache, 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __driConfigOptions, __driNConfigOptions); 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dri_fill_in_modes(screen, pixel_bits); 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* vim: set sw=3 ts=8 sts=3 expandtab: */ 421