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