i915_screen.c revision 7cba40306eec79b54128ca3bf56aa96ae56c5fd4
1aa59a937ccf41609081d3f9a4973df5478979785Brian/************************************************************************** 2aa59a937ccf41609081d3f9a4973df5478979785Brian * 3aa59a937ccf41609081d3f9a4973df5478979785Brian * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4aa59a937ccf41609081d3f9a4973df5478979785Brian * All Rights Reserved. 5aa59a937ccf41609081d3f9a4973df5478979785Brian * 6aa59a937ccf41609081d3f9a4973df5478979785Brian * Permission is hereby granted, free of charge, to any person obtaining a 7aa59a937ccf41609081d3f9a4973df5478979785Brian * copy of this software and associated documentation files (the 8aa59a937ccf41609081d3f9a4973df5478979785Brian * "Software"), to deal in the Software without restriction, including 9aa59a937ccf41609081d3f9a4973df5478979785Brian * without limitation the rights to use, copy, modify, merge, publish, 10aa59a937ccf41609081d3f9a4973df5478979785Brian * distribute, sub license, and/or sell copies of the Software, and to 11aa59a937ccf41609081d3f9a4973df5478979785Brian * permit persons to whom the Software is furnished to do so, subject to 12aa59a937ccf41609081d3f9a4973df5478979785Brian * the following conditions: 13aa59a937ccf41609081d3f9a4973df5478979785Brian * 14aa59a937ccf41609081d3f9a4973df5478979785Brian * The above copyright notice and this permission notice (including the 15aa59a937ccf41609081d3f9a4973df5478979785Brian * next paragraph) shall be included in all copies or substantial portions 16aa59a937ccf41609081d3f9a4973df5478979785Brian * of the Software. 17aa59a937ccf41609081d3f9a4973df5478979785Brian * 18aa59a937ccf41609081d3f9a4973df5478979785Brian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19aa59a937ccf41609081d3f9a4973df5478979785Brian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20aa59a937ccf41609081d3f9a4973df5478979785Brian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21aa59a937ccf41609081d3f9a4973df5478979785Brian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22aa59a937ccf41609081d3f9a4973df5478979785Brian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23aa59a937ccf41609081d3f9a4973df5478979785Brian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24aa59a937ccf41609081d3f9a4973df5478979785Brian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25aa59a937ccf41609081d3f9a4973df5478979785Brian * 26aa59a937ccf41609081d3f9a4973df5478979785Brian **************************************************************************/ 27aa59a937ccf41609081d3f9a4973df5478979785Brian 28aa59a937ccf41609081d3f9a4973df5478979785Brian 29d4d48c0579f7eb8d889ad325e8f1c9b4a95f6ed7Vinson Lee#include "draw/draw_context.h" 30b5dfc38eea8a4b497574ca791452c11fa4163c8aMarcin Slusarz#include "util/u_format.h" 31608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert#include "util/u_format_s3tc.h" 3228486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 33d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz#include "util/u_memory.h" 345b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca#include "util/u_string.h" 35aa59a937ccf41609081d3f9a4973df5478979785Brian 36aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_reg.h" 37abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz#include "i915_debug.h" 38f81b7a6285455e838adb061dcca90036c9f99522José Fonseca#include "i915_context.h" 39aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_screen.h" 40287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "i915_resource.h" 41bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#include "i915_winsys.h" 42c7015877beedd9831402755dbc58afddcbbd5339Jakob Bornecrantz#include "i915_public.h" 43d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 44d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 45d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 46d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Probe functions 47d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 48aa59a937ccf41609081d3f9a4973df5478979785Brian 49aa59a937ccf41609081d3f9a4973df5478979785Brian 50aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char * 511bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_vendor(struct pipe_screen *screen) 52aa59a937ccf41609081d3f9a4973df5478979785Brian{ 5321a949365d1de2f1fea6cb87c6f389e30156566fJosé Fonseca return "VMware, Inc."; 54aa59a937ccf41609081d3f9a4973df5478979785Brian} 55aa59a937ccf41609081d3f9a4973df5478979785Brian 56aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char * 571bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_name(struct pipe_screen *screen) 58aa59a937ccf41609081d3f9a4973df5478979785Brian{ 59aa59a937ccf41609081d3f9a4973df5478979785Brian static char buffer[128]; 60aa59a937ccf41609081d3f9a4973df5478979785Brian const char *chipset; 61aa59a937ccf41609081d3f9a4973df5478979785Brian 62835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz switch (i915_screen(screen)->iws->pci_id) { 63aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_G: 64aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "915G"; 65aa59a937ccf41609081d3f9a4973df5478979785Brian break; 66aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_GM: 67aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "915GM"; 68aa59a937ccf41609081d3f9a4973df5478979785Brian break; 69aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_G: 70aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945G"; 71aa59a937ccf41609081d3f9a4973df5478979785Brian break; 72aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GM: 73aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945GM"; 74aa59a937ccf41609081d3f9a4973df5478979785Brian break; 75aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GME: 76aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945GME"; 77aa59a937ccf41609081d3f9a4973df5478979785Brian break; 78aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_G33_G: 79aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "G33"; 80aa59a937ccf41609081d3f9a4973df5478979785Brian break; 81aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q35_G: 82aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "Q35"; 83aa59a937ccf41609081d3f9a4973df5478979785Brian break; 84aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q33_G: 85aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "Q33"; 86aa59a937ccf41609081d3f9a4973df5478979785Brian break; 878624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_G: 888624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter chipset = "Pineview G"; 898624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter break; 908624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_M: 918624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter chipset = "Pineview M"; 928624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter break; 93aa59a937ccf41609081d3f9a4973df5478979785Brian default: 94aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "unknown"; 95aa59a937ccf41609081d3f9a4973df5478979785Brian break; 96aa59a937ccf41609081d3f9a4973df5478979785Brian } 97aa59a937ccf41609081d3f9a4973df5478979785Brian 985b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca util_snprintf(buffer, sizeof(buffer), "i915 (chipset: %s)", chipset); 99aa59a937ccf41609081d3f9a4973df5478979785Brian return buffer; 100aa59a937ccf41609081d3f9a4973df5478979785Brian} 101aa59a937ccf41609081d3f9a4973df5478979785Brian 10217188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic int 103e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantzi915_get_param(struct pipe_screen *screen, enum pipe_cap cap) 10417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{ 10543e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz struct i915_screen *is = i915_screen(screen); 10643e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz 107e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz switch (cap) { 108e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Supported features (boolean caps). */ 109e7e1fd057e8cc78e7039637d045ac922bb82b8d8Jakob Bornecrantz case PIPE_CAP_ANISOTROPIC_FILTER: 1106d86429bd99a0b7a0bc0060a760f35c297b1dc5aJakob Bornecrantz case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE: 11117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_NPOT_TEXTURES: 11298ce1373e47d05d7150933c391fdeddbc897a3cdStéphane Marchesin case PIPE_CAP_POINT_SPRITE: 113e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_PRIMITIVE_RESTART: /* draw module */ 114fc77dee0bd6499177418be347bac875b12277053Jakob Bornecrantz case PIPE_CAP_TEXTURE_MIRROR_REPEAT: 115e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_TEXTURE_SHADOW_MAP: 11617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_TWO_SIDED_STENCIL: 117a2537bbc95bfeaaf50e5f0895d1f5741c3d7e349Stéphane Marchesin case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR: 118e7cdcefbee6c8bffdc421f38d97578180e7991b5Jakob Bornecrantz case PIPE_CAP_BLEND_EQUATION_SEPARATE: 119bfe507bcfffa7a0f5688172911c677186a0d5a87Stéphane Marchesin return 1; 120e7cdcefbee6c8bffdc421f38d97578180e7991b5Jakob Bornecrantz 121e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Unsupported features (boolean caps). */ 122379429137238e79296b8222c0e13d7d961910633Marek Olšák case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS: 123e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_DEPTH_CLAMP: 124e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_INDEP_BLEND_ENABLE: 125e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_INDEP_BLEND_FUNC: 12695c7881ac8240fa369e33db411bbd165d0f61948Marek Olšák case PIPE_CAP_TGSI_INSTANCEID: 127e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_SHADER_STENCIL_EXPORT: 128e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_TEXTURE_MIRROR_CLAMP: 129e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_TEXTURE_SWIZZLE: 130cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich case PIPE_CAP_TIMER_QUERY: 131893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin case PIPE_CAP_SM3: 132893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin case PIPE_CAP_SEAMLESS_CUBE_MAP: 133893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE: 134893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL: 135893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin case PIPE_CAP_MIXED_COLORBUFFER_FORMATS: 136cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich return 0; 137e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 13843e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz /* Features we can lie about (boolean caps). */ 139c7894dfad9edb853aafbce12f30fa50ef597eb36Jakob Bornecrantz case PIPE_CAP_GLSL: 14043e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz case PIPE_CAP_OCCLUSION_QUERY: 14143e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz return is->debug.lie ? 1 : 0; 14243e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz 143e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Texturing. */ 144e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS: 145e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_MAX_COMBINED_SAMPLERS: 146e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz return 8; 147e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: 148e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz return 0; 14917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: 150e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_2D_LEVELS; 15117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: 152e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_3D_LEVELS; 15317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: 154e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_2D_LEVELS; 1557cba40306eec79b54128ca3bf56aa96ae56c5fd4Stéphane Marchesin case PIPE_CAP_MIN_TEXEL_OFFSET: 1567cba40306eec79b54128ca3bf56aa96ae56c5fd4Stéphane Marchesin case PIPE_CAP_MAX_TEXEL_OFFSET: 1577cba40306eec79b54128ca3bf56aa96ae56c5fd4Stéphane Marchesin return 0; 158e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 159e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Render targets. */ 160e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_MAX_RENDER_TARGETS: 161e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz return 1; 162e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 163e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Fragment coordinate conventions. */ 1646c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT: 1656c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: 1666c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri return 1; 1676c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT: 1686c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: 1696c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri return 0; 170e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 17117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian default: 172ac85ab066b7e3a7ee818849491b97a499038190bVinson Lee debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap); 17317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 17417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian } 17517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian} 17617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 177a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieristatic int 178e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantzi915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap cap) 179a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri{ 180a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri switch(shader) { 181a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_VERTEX: 182e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz return draw_get_shader_param(shader, cap); 183a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_FRAGMENT: 184a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri break; 185a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri default: 186a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 187a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 188a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 189a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri /* XXX: these are just shader model 2.0 values, fix this! */ 190e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz switch(cap) { 191a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_INSTRUCTIONS: 192a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 96; 193a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS: 194a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 64; 195a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS: 196a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 32; 197a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS: 198a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 8; 199a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: 200a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 201a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_INPUTS: 202a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 10; 203a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONSTS: 204a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 32; 205a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: 206a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 1; 207a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEMPS: 208a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 12; /* XXX: 12 -> 32 ? */ 209a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_ADDRS: 210a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 211a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_PREDS: 212a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 213a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: 214a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 2155bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR: 2165bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR: 2175bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: 2185bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: 2195bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák return 1; 2209aa089eac05ebefafb6610b4a7e209b2fd1e93f6Marek Olšák case PIPE_SHADER_CAP_SUBROUTINES: 2219aa089eac05ebefafb6610b4a7e209b2fd1e93f6Marek Olšák return 0; 22217b695e6e7dd730497fb60a8e161935b23fa0e9cBryan Cain case PIPE_SHADER_CAP_INTEGERS: 22317b695e6e7dd730497fb60a8e161935b23fa0e9cBryan Cain return 0; 224a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri default: 225ac85ab066b7e3a7ee818849491b97a499038190bVinson Lee debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap); 226706380cf7da3d376b22bc32cb5decfb66665053dVinson Lee return 0; 227a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 228a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri} 229a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 23017188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic float 231e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantzi915_get_paramf(struct pipe_screen *screen, enum pipe_cap cap) 23217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{ 233e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz switch(cap) { 23417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_LINE_WIDTH: 23517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian /* fall-through */ 23617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_LINE_WIDTH_AA: 23717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 7.5; 23817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 23917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_POINT_WIDTH: 24017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian /* fall-through */ 24117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_POINT_WIDTH_AA: 24217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 255.0; 24317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 24417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: 24517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 4.0; 24617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 24717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: 24817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 16.0; 24917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 25017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian default: 251ac85ab066b7e3a7ee818849491b97a499038190bVinson Lee debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap); 25217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 25317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian } 25417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian} 25517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 2561a69b50b3b441ce8f7a00af3a7f02c37df50f6c3Stéphane Marchesinboolean 2571bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_is_format_supported(struct pipe_screen *screen, 258bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger enum pipe_format format, 2591bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz enum pipe_texture_target target, 260bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger unsigned sample_count, 261e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák unsigned tex_usage) 262364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{ 263364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian static const enum pipe_format tex_supported[] = { 264b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B8G8R8A8_UNORM, 265b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz PIPE_FORMAT_B8G8R8X8_UNORM, 266465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin PIPE_FORMAT_R8G8B8A8_UNORM, 267465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin PIPE_FORMAT_R8G8B8X8_UNORM, 268b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B5G6R5_UNORM, 2692e481e5fc4c99d353cc5b21dacf1470847a11646Stéphane Marchesin PIPE_FORMAT_B10G10R10A2_UNORM, 27054f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_L8_UNORM, 27154f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_A8_UNORM, 27254f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_I8_UNORM, 273b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_L8A8_UNORM, 274b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_UYVY, 275b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_YUYV, 2764bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* XXX why not? 2774bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z16_UNORM, */ 278608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert PIPE_FORMAT_DXT1_RGB, 279608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert PIPE_FORMAT_DXT1_RGBA, 280608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert PIPE_FORMAT_DXT3_RGBA, 281608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert PIPE_FORMAT_DXT5_RGBA, 2824bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z24X8_UNORM, 2836fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger PIPE_FORMAT_Z24_UNORM_S8_USCALED, 284364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian PIPE_FORMAT_NONE /* list terminator */ 285364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian }; 286bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger static const enum pipe_format render_supported[] = { 287b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B8G8R8A8_UNORM, 288465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin PIPE_FORMAT_R8G8B8A8_UNORM, 289b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B5G6R5_UNORM, 2902e481e5fc4c99d353cc5b21dacf1470847a11646Stéphane Marchesin PIPE_FORMAT_B10G10R10A2_UNORM, 291465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin PIPE_FORMAT_L8_UNORM, 292465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin PIPE_FORMAT_A8_UNORM, 293465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin PIPE_FORMAT_I8_UNORM, 294bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger PIPE_FORMAT_NONE /* list terminator */ 295bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger }; 296bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger static const enum pipe_format depth_supported[] = { 2974bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* XXX why not? 2984bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z16_UNORM, */ 2994bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z24X8_UNORM, 3006fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger PIPE_FORMAT_Z24_UNORM_S8_USCALED, 301364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian PIPE_FORMAT_NONE /* list terminator */ 302364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian }; 303364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian const enum pipe_format *list; 304364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian uint i; 305364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 30675fa5c99a86c1ae0f8a4fecc016a5f82da9ae80aMarek Olšák if (!util_format_is_supported(format, tex_usage)) 30775fa5c99a86c1ae0f8a4fecc016a5f82da9ae80aMarek Olšák return FALSE; 30875fa5c99a86c1ae0f8a4fecc016a5f82da9ae80aMarek Olšák 309bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger if (sample_count > 1) 310bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger return FALSE; 311bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger 312bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger if(tex_usage & PIPE_BIND_DEPTH_STENCIL) 313bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger list = depth_supported; 314bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger else if (tex_usage & PIPE_BIND_RENDER_TARGET) 315bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger list = render_supported; 3168aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca else 3178aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca list = tex_supported; 318364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 319364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) { 320364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian if (list[i] == format) 321364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian return TRUE; 322364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian } 323364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 324364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian return FALSE; 325364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian} 326364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 327d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 328d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 329d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Fence functions 330d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 331d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 332d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 333d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic void 334d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_reference(struct pipe_screen *screen, 335d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle **ptr, 336d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence) 337d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 338d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 339d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 340d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws->fence_reference(is->iws, ptr, fence); 341d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 342d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 343bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšákstatic boolean 344d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_signalled(struct pipe_screen *screen, 345bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšák struct pipe_fence_handle *fence) 346d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 347d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 348d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 349bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšák return is->iws->fence_signalled(is->iws, fence) == 0; 350d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 351d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 352bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšákstatic boolean 353d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_finish(struct pipe_screen *screen, 354d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence, 355b39bccbd4ed71e9585da4cf5acf7b887b2e90899Marek Olšák uint64_t timeout) 356d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 357d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 358d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 359bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšák return is->iws->fence_finish(is->iws, fence) == 0; 360d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 361d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 362d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 363d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 364d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Generic functions 365d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 366d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 367d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 368aa59a937ccf41609081d3f9a4973df5478979785Brianstatic void 369ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantzi915_flush_frontbuffer(struct pipe_screen *screen, 370ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz struct pipe_resource *resource, 371ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz unsigned level, unsigned layer, 372ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz void *winsys_drawable_handle) 373ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz{ 374ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz /* XXX: Dummy right now. */ 375ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)screen; 376ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)resource; 377ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)level; 378ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)layer; 379ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)winsys_drawable_handle; 380ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz} 381ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz 382ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantzstatic void 3831bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_destroy_screen(struct pipe_screen *screen) 384aa59a937ccf41609081d3f9a4973df5478979785Brian{ 385d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 3869dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 387d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz if (is->iws) 388d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws->destroy(is->iws); 3899dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 390d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz FREE(is); 391aa59a937ccf41609081d3f9a4973df5478979785Brian} 392aa59a937ccf41609081d3f9a4973df5478979785Brian 393aa59a937ccf41609081d3f9a4973df5478979785Brian/** 394aa59a937ccf41609081d3f9a4973df5478979785Brian * Create a new i915_screen object 395aa59a937ccf41609081d3f9a4973df5478979785Brian */ 396aa59a937ccf41609081d3f9a4973df5478979785Brianstruct pipe_screen * 397835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantzi915_screen_create(struct i915_winsys *iws) 398aa59a937ccf41609081d3f9a4973df5478979785Brian{ 3991bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz struct i915_screen *is = CALLOC_STRUCT(i915_screen); 400aa59a937ccf41609081d3f9a4973df5478979785Brian 4011bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz if (!is) 402aa59a937ccf41609081d3f9a4973df5478979785Brian return NULL; 403aa59a937ccf41609081d3f9a4973df5478979785Brian 404835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz switch (iws->pci_id) { 405aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_G: 406aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_GM: 4071bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->is_i945 = FALSE; 408aa59a937ccf41609081d3f9a4973df5478979785Brian break; 409aa59a937ccf41609081d3f9a4973df5478979785Brian 410aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_G: 411aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GM: 412aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GME: 413aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_G33_G: 414aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q33_G: 415aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q35_G: 4168624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_G: 4178624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_M: 4181bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->is_i945 = TRUE; 419aa59a937ccf41609081d3f9a4973df5478979785Brian break; 420aa59a937ccf41609081d3f9a4973df5478979785Brian 421aa59a937ccf41609081d3f9a4973df5478979785Brian default: 422baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf("%s: unknown pci id 0x%x, cannot create screen\n", 423835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz __FUNCTION__, iws->pci_id); 424520b6abdecdaba856e5ca04938e18eb83b33dfaaVinson Lee FREE(is); 425aa59a937ccf41609081d3f9a4973df5478979785Brian return NULL; 426aa59a937ccf41609081d3f9a4973df5478979785Brian } 427aa59a937ccf41609081d3f9a4973df5478979785Brian 428d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws = iws; 429aa59a937ccf41609081d3f9a4973df5478979785Brian 430d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.winsys = NULL; 431aa59a937ccf41609081d3f9a4973df5478979785Brian 4321bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.destroy = i915_destroy_screen; 433ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz is->base.flush_frontbuffer = i915_flush_frontbuffer; 434aa59a937ccf41609081d3f9a4973df5478979785Brian 4351bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_name = i915_get_name; 4361bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_vendor = i915_get_vendor; 4371bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_param = i915_get_param; 438a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri is->base.get_shader_param = i915_get_shader_param; 4391bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_paramf = i915_get_paramf; 4401bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.is_format_supported = i915_is_format_supported; 441aa59a937ccf41609081d3f9a4973df5478979785Brian 4427f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell is->base.context_create = i915_create_context; 4437f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 444d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_reference = i915_fence_reference; 445d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_signalled = i915_fence_signalled; 446d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_finish = i915_fence_finish; 447d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 448287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell i915_init_screen_resource_functions(is); 449aa59a937ccf41609081d3f9a4973df5478979785Brian 450abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz i915_debug_init(is); 451abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 452608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert util_format_s3tc_init(); 453608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert 4541bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz return &is->base; 455aa59a937ccf41609081d3f9a4973df5478979785Brian} 456