i915_screen.c revision abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4f
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 2928486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 30d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz#include "util/u_memory.h" 315b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca#include "util/u_string.h" 32aa59a937ccf41609081d3f9a4973df5478979785Brian 33aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_reg.h" 34abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz#include "i915_debug.h" 35f81b7a6285455e838adb061dcca90036c9f99522José Fonseca#include "i915_context.h" 36aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_screen.h" 37287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "i915_surface.h" 38287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "i915_resource.h" 39bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#include "i915_winsys.h" 40d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 41d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 42d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 43d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Probe functions 44d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 45aa59a937ccf41609081d3f9a4973df5478979785Brian 46aa59a937ccf41609081d3f9a4973df5478979785Brian 47aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char * 481bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_vendor(struct pipe_screen *screen) 49aa59a937ccf41609081d3f9a4973df5478979785Brian{ 5021a949365d1de2f1fea6cb87c6f389e30156566fJosé Fonseca return "VMware, Inc."; 51aa59a937ccf41609081d3f9a4973df5478979785Brian} 52aa59a937ccf41609081d3f9a4973df5478979785Brian 53aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char * 541bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_name(struct pipe_screen *screen) 55aa59a937ccf41609081d3f9a4973df5478979785Brian{ 56aa59a937ccf41609081d3f9a4973df5478979785Brian static char buffer[128]; 57aa59a937ccf41609081d3f9a4973df5478979785Brian const char *chipset; 58aa59a937ccf41609081d3f9a4973df5478979785Brian 59835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz switch (i915_screen(screen)->iws->pci_id) { 60aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_G: 61aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "915G"; 62aa59a937ccf41609081d3f9a4973df5478979785Brian break; 63aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_GM: 64aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "915GM"; 65aa59a937ccf41609081d3f9a4973df5478979785Brian break; 66aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_G: 67aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945G"; 68aa59a937ccf41609081d3f9a4973df5478979785Brian break; 69aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GM: 70aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945GM"; 71aa59a937ccf41609081d3f9a4973df5478979785Brian break; 72aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GME: 73aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945GME"; 74aa59a937ccf41609081d3f9a4973df5478979785Brian break; 75aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_G33_G: 76aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "G33"; 77aa59a937ccf41609081d3f9a4973df5478979785Brian break; 78aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q35_G: 79aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "Q35"; 80aa59a937ccf41609081d3f9a4973df5478979785Brian break; 81aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q33_G: 82aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "Q33"; 83aa59a937ccf41609081d3f9a4973df5478979785Brian break; 84aa59a937ccf41609081d3f9a4973df5478979785Brian default: 85aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "unknown"; 86aa59a937ccf41609081d3f9a4973df5478979785Brian break; 87aa59a937ccf41609081d3f9a4973df5478979785Brian } 88aa59a937ccf41609081d3f9a4973df5478979785Brian 895b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca util_snprintf(buffer, sizeof(buffer), "i915 (chipset: %s)", chipset); 90aa59a937ccf41609081d3f9a4973df5478979785Brian return buffer; 91aa59a937ccf41609081d3f9a4973df5478979785Brian} 92aa59a937ccf41609081d3f9a4973df5478979785Brian 9317188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic int 94e1238b5cad3845c029f60d92c08e810274517d33José Fonsecai915_get_param(struct pipe_screen *screen, enum pipe_cap param) 9517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{ 9617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian switch (param) { 9717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS: 9817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 8; 9998e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: 10098e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul return 0; 10198e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul case PIPE_CAP_MAX_COMBINED_SAMPLERS: 10298e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul return 8; 10317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_NPOT_TEXTURES: 10417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 10517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_TWO_SIDED_STENCIL: 10617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 10717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_GLSL: 10817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 10917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_ANISOTROPIC_FILTER: 11017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 11117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_POINT_SPRITE: 11217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 11317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_RENDER_TARGETS: 11417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 11517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_OCCLUSION_QUERY: 11617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 117cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich case PIPE_CAP_TIMER_QUERY: 118cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich return 0; 11917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_TEXTURE_SHADOW_MAP: 12017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 12117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: 122e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_2D_LEVELS; 12317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: 124e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_3D_LEVELS; 12517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: 126e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_2D_LEVELS; 1276c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT: 1286c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: 1296c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri return 1; 1306c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT: 1316c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: 1326c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri return 0; 1334bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE: 1344bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* disable for now */ 1354bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger return 0; 13617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian default: 13717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 13817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian } 13917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian} 14017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 14117188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic float 142e1238b5cad3845c029f60d92c08e810274517d33José Fonsecai915_get_paramf(struct pipe_screen *screen, enum pipe_cap param) 14317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{ 14417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian switch (param) { 14517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_LINE_WIDTH: 14617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian /* fall-through */ 14717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_LINE_WIDTH_AA: 14817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 7.5; 14917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 15017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_POINT_WIDTH: 15117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian /* fall-through */ 15217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_POINT_WIDTH_AA: 15317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 255.0; 15417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 15517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: 15617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 4.0; 15717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 15817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: 15917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 16.0; 16017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 16117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian default: 16217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 16317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian } 16417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian} 16517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 166364f8cad0f8f02fd39d9c51ea0774d349121b58dBrianstatic boolean 1671bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_is_format_supported(struct pipe_screen *screen, 168bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger enum pipe_format format, 1691bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz enum pipe_texture_target target, 170bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger unsigned sample_count, 171bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger unsigned tex_usage, 1721bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz unsigned geom_flags) 173364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{ 174364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian static const enum pipe_format tex_supported[] = { 175b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B8G8R8A8_UNORM, 176b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz PIPE_FORMAT_B8G8R8X8_UNORM, 177b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz PIPE_FORMAT_R8G8B8A8_UNORM, 178b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz#if 0 179b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz PIPE_FORMAT_R8G8B8X8_UNORM, 180b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz#endif 181b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B5G6R5_UNORM, 18254f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_L8_UNORM, 18354f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_A8_UNORM, 18454f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_I8_UNORM, 185b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_L8A8_UNORM, 186b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_UYVY, 187b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_YUYV, 1884bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* XXX why not? 1894bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z16_UNORM, */ 1904bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z24X8_UNORM, 1916fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger PIPE_FORMAT_Z24_UNORM_S8_USCALED, 192364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian PIPE_FORMAT_NONE /* list terminator */ 193364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian }; 194bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger static const enum pipe_format render_supported[] = { 195b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B8G8R8A8_UNORM, 196b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B5G6R5_UNORM, 197bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger PIPE_FORMAT_NONE /* list terminator */ 198bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger }; 199bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger static const enum pipe_format depth_supported[] = { 2004bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* XXX why not? 2014bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z16_UNORM, */ 2024bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z24X8_UNORM, 2036fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger PIPE_FORMAT_Z24_UNORM_S8_USCALED, 204364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian PIPE_FORMAT_NONE /* list terminator */ 205364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian }; 206364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian const enum pipe_format *list; 207364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian uint i; 208364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 209bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger if (sample_count > 1) 210bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger return FALSE; 211bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger 212bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger if(tex_usage & PIPE_BIND_DEPTH_STENCIL) 213bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger list = depth_supported; 214bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger else if (tex_usage & PIPE_BIND_RENDER_TARGET) 215bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger list = render_supported; 2168aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca else 2178aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca list = tex_supported; 218364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 219364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) { 220364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian if (list[i] == format) 221364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian return TRUE; 222364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian } 223364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 224364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian return FALSE; 225364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian} 226364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 227d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 228d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 229d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Fence functions 230d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 231d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 232d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 233d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic void 234d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_reference(struct pipe_screen *screen, 235d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle **ptr, 236d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence) 237d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 238d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 239d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 240d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws->fence_reference(is->iws, ptr, fence); 241d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 242d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 243d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int 244d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_signalled(struct pipe_screen *screen, 245d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence, 246d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz unsigned flags) 247d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 248d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 249d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 250d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz return is->iws->fence_signalled(is->iws, fence); 251d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 252d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 253d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int 254d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_finish(struct pipe_screen *screen, 255d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence, 256d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz unsigned flags) 257d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 258d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 259d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 260d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz return is->iws->fence_finish(is->iws, fence); 261d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 262d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 263d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 264d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 265d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Generic functions 266d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 267d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 268d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 269aa59a937ccf41609081d3f9a4973df5478979785Brianstatic void 2701bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_destroy_screen(struct pipe_screen *screen) 271aa59a937ccf41609081d3f9a4973df5478979785Brian{ 272d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 2739dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 274d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz if (is->iws) 275d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws->destroy(is->iws); 2769dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 277d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz FREE(is); 278aa59a937ccf41609081d3f9a4973df5478979785Brian} 279aa59a937ccf41609081d3f9a4973df5478979785Brian 280aa59a937ccf41609081d3f9a4973df5478979785Brian/** 281aa59a937ccf41609081d3f9a4973df5478979785Brian * Create a new i915_screen object 282aa59a937ccf41609081d3f9a4973df5478979785Brian */ 283aa59a937ccf41609081d3f9a4973df5478979785Brianstruct pipe_screen * 284835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantzi915_screen_create(struct i915_winsys *iws) 285aa59a937ccf41609081d3f9a4973df5478979785Brian{ 2861bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz struct i915_screen *is = CALLOC_STRUCT(i915_screen); 287aa59a937ccf41609081d3f9a4973df5478979785Brian 2881bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz if (!is) 289aa59a937ccf41609081d3f9a4973df5478979785Brian return NULL; 290aa59a937ccf41609081d3f9a4973df5478979785Brian 291835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz switch (iws->pci_id) { 292aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_G: 293aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_GM: 2941bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->is_i945 = FALSE; 295aa59a937ccf41609081d3f9a4973df5478979785Brian break; 296aa59a937ccf41609081d3f9a4973df5478979785Brian 297aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_G: 298aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GM: 299aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GME: 300aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_G33_G: 301aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q33_G: 302aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q35_G: 3031bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->is_i945 = TRUE; 304aa59a937ccf41609081d3f9a4973df5478979785Brian break; 305aa59a937ccf41609081d3f9a4973df5478979785Brian 306aa59a937ccf41609081d3f9a4973df5478979785Brian default: 307baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf("%s: unknown pci id 0x%x, cannot create screen\n", 308835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz __FUNCTION__, iws->pci_id); 309520b6abdecdaba856e5ca04938e18eb83b33dfaaVinson Lee FREE(is); 310aa59a937ccf41609081d3f9a4973df5478979785Brian return NULL; 311aa59a937ccf41609081d3f9a4973df5478979785Brian } 312aa59a937ccf41609081d3f9a4973df5478979785Brian 313d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws = iws; 314aa59a937ccf41609081d3f9a4973df5478979785Brian 315d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.winsys = NULL; 316aa59a937ccf41609081d3f9a4973df5478979785Brian 3171bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.destroy = i915_destroy_screen; 318aa59a937ccf41609081d3f9a4973df5478979785Brian 3191bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_name = i915_get_name; 3201bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_vendor = i915_get_vendor; 3211bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_param = i915_get_param; 3221bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_paramf = i915_get_paramf; 3231bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.is_format_supported = i915_is_format_supported; 324aa59a937ccf41609081d3f9a4973df5478979785Brian 3257f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell is->base.context_create = i915_create_context; 3267f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 327d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_reference = i915_fence_reference; 328d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_signalled = i915_fence_signalled; 329d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_finish = i915_fence_finish; 330d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 331287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell i915_init_screen_resource_functions(is); 332287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell i915_init_screen_surface_functions(is); 333aa59a937ccf41609081d3f9a4973df5478979785Brian 334abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz i915_debug_init(is); 335abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 3361bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz return &is->base; 337aa59a937ccf41609081d3f9a4973df5478979785Brian} 338