i915_screen.c revision ec3c5ac5924d0daab424215a45ea3a089b9df54f
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"
3028486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h"
31d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz#include "util/u_memory.h"
325b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca#include "util/u_string.h"
33aa59a937ccf41609081d3f9a4973df5478979785Brian
34aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_reg.h"
35abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz#include "i915_debug.h"
36f81b7a6285455e838adb061dcca90036c9f99522José Fonseca#include "i915_context.h"
37aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_screen.h"
38287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "i915_resource.h"
39bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#include "i915_winsys.h"
40c7015877beedd9831402755dbc58afddcbbd5339Jakob Bornecrantz#include "i915_public.h"
41d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
42d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
43d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/*
44d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Probe functions
45d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */
46aa59a937ccf41609081d3f9a4973df5478979785Brian
47aa59a937ccf41609081d3f9a4973df5478979785Brian
48aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char *
491bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_vendor(struct pipe_screen *screen)
50aa59a937ccf41609081d3f9a4973df5478979785Brian{
5121a949365d1de2f1fea6cb87c6f389e30156566fJosé Fonseca   return "VMware, Inc.";
52aa59a937ccf41609081d3f9a4973df5478979785Brian}
53aa59a937ccf41609081d3f9a4973df5478979785Brian
54aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char *
551bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_name(struct pipe_screen *screen)
56aa59a937ccf41609081d3f9a4973df5478979785Brian{
57aa59a937ccf41609081d3f9a4973df5478979785Brian   static char buffer[128];
58aa59a937ccf41609081d3f9a4973df5478979785Brian   const char *chipset;
59aa59a937ccf41609081d3f9a4973df5478979785Brian
60835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz   switch (i915_screen(screen)->iws->pci_id) {
61aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_G:
62aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "915G";
63aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
64aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_GM:
65aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "915GM";
66aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
67aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_G:
68aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "945G";
69aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
70aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GM:
71aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "945GM";
72aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
73aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GME:
74aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "945GME";
75aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
76aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_G33_G:
77aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "G33";
78aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
79aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q35_G:
80aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "Q35";
81aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
82aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q33_G:
83aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "Q33";
84aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
858624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_G:
868624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter      chipset = "Pineview G";
878624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter      break;
888624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_M:
898624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter      chipset = "Pineview M";
908624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter      break;
91aa59a937ccf41609081d3f9a4973df5478979785Brian   default:
92aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "unknown";
93aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
94aa59a937ccf41609081d3f9a4973df5478979785Brian   }
95aa59a937ccf41609081d3f9a4973df5478979785Brian
965b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca   util_snprintf(buffer, sizeof(buffer), "i915 (chipset: %s)", chipset);
97aa59a937ccf41609081d3f9a4973df5478979785Brian   return buffer;
98aa59a937ccf41609081d3f9a4973df5478979785Brian}
99aa59a937ccf41609081d3f9a4973df5478979785Brian
10017188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic int
101e1238b5cad3845c029f60d92c08e810274517d33José Fonsecai915_get_param(struct pipe_screen *screen, enum pipe_cap param)
10217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{
10317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   switch (param) {
10417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
10517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 8;
10698e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul   case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS:
10798e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul      return 0;
10898e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul   case PIPE_CAP_MAX_COMBINED_SAMPLERS:
10998e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul      return 8;
11017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_NPOT_TEXTURES:
11117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 1;
11217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_TWO_SIDED_STENCIL:
11317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 1;
11417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_GLSL:
11517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
11617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_ANISOTROPIC_FILTER:
11717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
11817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_POINT_SPRITE:
11917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
12017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_RENDER_TARGETS:
12117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 1;
12217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_OCCLUSION_QUERY:
12317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
124cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich   case PIPE_CAP_TIMER_QUERY:
125cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich      return 0;
12617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_TEXTURE_SHADOW_MAP:
12717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 1;
12817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
129e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_2D_LEVELS;
13017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
131e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_3D_LEVELS;
13217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
133e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_2D_LEVELS;
1346c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
1356c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
1366c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri      return 1;
1376c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
1386c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
1396c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri      return 0;
1404bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger   case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
1414bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      /* disable for now */
1424bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      return 0;
14317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   default:
14417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
14517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   }
14617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian}
14717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
148a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieristatic int
149a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbierii915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
150a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri{
151a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   switch(shader) {
152a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   case PIPE_SHADER_VERTEX:
153a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      return draw_get_shader_param(shader, param);
154a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   case PIPE_SHADER_FRAGMENT:
155a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      break;
156a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   default:
157a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      return 0;
158a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   }
159a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri
160a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   /* XXX: these are just shader model 2.0 values, fix this! */
161a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   switch(param) {
162a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
163a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 96;
164a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
165a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 64;
166a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
167a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 32;
168a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
169a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 8;
170a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
171a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 0;
172a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_INPUTS:
173a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 10;
174a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_CONSTS:
175a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 32;
176a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
177a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 1;
178a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_TEMPS:
179a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 12; /* XXX: 12 -> 32 ? */
180a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_ADDRS:
181a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 0;
182a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_PREDS:
183a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 0;
184a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
185a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 0;
1865bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák      case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
1875bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák      case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
1885bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák      case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
1895bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák      case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
1905bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák         return 1;
1919aa089eac05ebefafb6610b4a7e209b2fd1e93f6Marek Olšák      case PIPE_SHADER_CAP_SUBROUTINES:
1929aa089eac05ebefafb6610b4a7e209b2fd1e93f6Marek Olšák         return 0;
193a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      default:
194706380cf7da3d376b22bc32cb5decfb66665053dVinson Lee         assert(0);
195706380cf7da3d376b22bc32cb5decfb66665053dVinson Lee         return 0;
196a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   }
197a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri}
198a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri
19917188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic float
200e1238b5cad3845c029f60d92c08e810274517d33José Fonsecai915_get_paramf(struct pipe_screen *screen, enum pipe_cap param)
20117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{
20217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   switch (param) {
20317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_LINE_WIDTH:
20417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      /* fall-through */
20517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_LINE_WIDTH_AA:
20617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 7.5;
20717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
20817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_POINT_WIDTH:
20917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      /* fall-through */
21017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_POINT_WIDTH_AA:
21117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 255.0;
21217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
21317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
21417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 4.0;
21517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
21617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
21717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 16.0;
21817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
21917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   default:
22017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
22117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   }
22217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian}
22317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
224364f8cad0f8f02fd39d9c51ea0774d349121b58dBrianstatic boolean
2251bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_is_format_supported(struct pipe_screen *screen,
226bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger                         enum pipe_format format,
2271bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz                         enum pipe_texture_target target,
228bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger                         unsigned sample_count,
229bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger                         unsigned tex_usage,
2301bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz                         unsigned geom_flags)
231364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{
232364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   static const enum pipe_format tex_supported[] = {
233b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B8G8R8A8_UNORM,
234b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz      PIPE_FORMAT_B8G8R8X8_UNORM,
235b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B5G6R5_UNORM,
23654f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_L8_UNORM,
23754f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_A8_UNORM,
23854f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_I8_UNORM,
239b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_L8A8_UNORM,
240b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_UYVY,
241b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_YUYV,
2424bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      /* XXX why not?
2434bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z16_UNORM, */
2444bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z24X8_UNORM,
2456fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger      PIPE_FORMAT_Z24_UNORM_S8_USCALED,
246364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      PIPE_FORMAT_NONE  /* list terminator */
247364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   };
248bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   static const enum pipe_format render_supported[] = {
249b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B8G8R8A8_UNORM,
250b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B5G6R5_UNORM,
251bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      PIPE_FORMAT_NONE  /* list terminator */
252bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   };
253bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   static const enum pipe_format depth_supported[] = {
2544bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      /* XXX why not?
2554bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z16_UNORM, */
2564bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z24X8_UNORM,
2576fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger      PIPE_FORMAT_Z24_UNORM_S8_USCALED,
258364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      PIPE_FORMAT_NONE  /* list terminator */
259364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   };
260364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   const enum pipe_format *list;
261364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   uint i;
262364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
263bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   if (sample_count > 1)
264bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      return FALSE;
265bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger
266bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   if(tex_usage & PIPE_BIND_DEPTH_STENCIL)
267bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      list = depth_supported;
268bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   else if (tex_usage & PIPE_BIND_RENDER_TARGET)
269bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      list = render_supported;
2708aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca   else
2718aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca      list = tex_supported;
272364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
273364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) {
274364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      if (list[i] == format)
275364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian         return TRUE;
276364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   }
277364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
278364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   return FALSE;
279364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian}
280364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
281d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
282d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/*
283d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Fence functions
284d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */
285d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
286d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
287d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic void
288d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_reference(struct pipe_screen *screen,
289d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     struct pipe_fence_handle **ptr,
290d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     struct pipe_fence_handle *fence)
291d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
292d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
293d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
294d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->iws->fence_reference(is->iws, ptr, fence);
295d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
296d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
297d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int
298d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_signalled(struct pipe_screen *screen,
299d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     struct pipe_fence_handle *fence,
300d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     unsigned flags)
301d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
302d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
303d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
304d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   return is->iws->fence_signalled(is->iws, fence);
305d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
306d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
307d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int
308d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_finish(struct pipe_screen *screen,
309d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                  struct pipe_fence_handle *fence,
310d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                  unsigned flags)
311d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
312d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
313d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
314d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   return is->iws->fence_finish(is->iws, fence);
315d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
316d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
317d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
318d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/*
319d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Generic functions
320d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */
321d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
322d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
323aa59a937ccf41609081d3f9a4973df5478979785Brianstatic void
324ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantzi915_flush_frontbuffer(struct pipe_screen *screen,
325ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz                       struct pipe_resource *resource,
326ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz                       unsigned level, unsigned layer,
327ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz                       void *winsys_drawable_handle)
328ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz{
329ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   /* XXX: Dummy right now. */
330ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)screen;
331ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)resource;
332ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)level;
333ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)layer;
334ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)winsys_drawable_handle;
335ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz}
336ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz
337ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantzstatic void
3381bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_destroy_screen(struct pipe_screen *screen)
339aa59a937ccf41609081d3f9a4973df5478979785Brian{
340d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
3419dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca
342d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   if (is->iws)
343d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz      is->iws->destroy(is->iws);
3449dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca
345d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   FREE(is);
346aa59a937ccf41609081d3f9a4973df5478979785Brian}
347aa59a937ccf41609081d3f9a4973df5478979785Brian
348aa59a937ccf41609081d3f9a4973df5478979785Brian/**
349aa59a937ccf41609081d3f9a4973df5478979785Brian * Create a new i915_screen object
350aa59a937ccf41609081d3f9a4973df5478979785Brian */
351aa59a937ccf41609081d3f9a4973df5478979785Brianstruct pipe_screen *
352835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantzi915_screen_create(struct i915_winsys *iws)
353aa59a937ccf41609081d3f9a4973df5478979785Brian{
3541bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   struct i915_screen *is = CALLOC_STRUCT(i915_screen);
355aa59a937ccf41609081d3f9a4973df5478979785Brian
3561bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   if (!is)
357aa59a937ccf41609081d3f9a4973df5478979785Brian      return NULL;
358aa59a937ccf41609081d3f9a4973df5478979785Brian
359835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz   switch (iws->pci_id) {
360aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_G:
361aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_GM:
3621bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz      is->is_i945 = FALSE;
363aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
364aa59a937ccf41609081d3f9a4973df5478979785Brian
365aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_G:
366aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GM:
367aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GME:
368aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_G33_G:
369aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q33_G:
370aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q35_G:
3718624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_G:
3728624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_M:
3731bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz      is->is_i945 = TRUE;
374aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
375aa59a937ccf41609081d3f9a4973df5478979785Brian
376aa59a937ccf41609081d3f9a4973df5478979785Brian   default:
377baab98a637d526871fb77ec6f313012f49c0e998José Fonseca      debug_printf("%s: unknown pci id 0x%x, cannot create screen\n",
378835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz                   __FUNCTION__, iws->pci_id);
379520b6abdecdaba856e5ca04938e18eb83b33dfaaVinson Lee      FREE(is);
380aa59a937ccf41609081d3f9a4973df5478979785Brian      return NULL;
381aa59a937ccf41609081d3f9a4973df5478979785Brian   }
382aa59a937ccf41609081d3f9a4973df5478979785Brian
383d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->iws = iws;
384aa59a937ccf41609081d3f9a4973df5478979785Brian
385d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.winsys = NULL;
386aa59a937ccf41609081d3f9a4973df5478979785Brian
3871bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.destroy = i915_destroy_screen;
388ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   is->base.flush_frontbuffer = i915_flush_frontbuffer;
389aa59a937ccf41609081d3f9a4973df5478979785Brian
3901bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_name = i915_get_name;
3911bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_vendor = i915_get_vendor;
3921bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_param = i915_get_param;
393a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   is->base.get_shader_param = i915_get_shader_param;
3941bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_paramf = i915_get_paramf;
3951bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.is_format_supported = i915_is_format_supported;
396aa59a937ccf41609081d3f9a4973df5478979785Brian
3977f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell   is->base.context_create = i915_create_context;
3987f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell
399d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_reference = i915_fence_reference;
400d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_signalled = i915_fence_signalled;
401d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_finish = i915_fence_finish;
402d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
403287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   i915_init_screen_resource_functions(is);
404aa59a937ccf41609081d3f9a4973df5478979785Brian
405abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz   i915_debug_init(is);
406abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz
4071bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   return &is->base;
408aa59a937ccf41609081d3f9a4973df5478979785Brian}
409