i915_screen.c revision 8624fe7a49f2bd42d17f79d504078ed58065f579
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_surface.h"
39287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "i915_resource.h"
40bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#include "i915_winsys.h"
41c7015877beedd9831402755dbc58afddcbbd5339Jakob Bornecrantz#include "i915_public.h"
42d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
43d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
44d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/*
45d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Probe functions
46d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */
47aa59a937ccf41609081d3f9a4973df5478979785Brian
48aa59a937ccf41609081d3f9a4973df5478979785Brian
49aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char *
501bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_vendor(struct pipe_screen *screen)
51aa59a937ccf41609081d3f9a4973df5478979785Brian{
5221a949365d1de2f1fea6cb87c6f389e30156566fJosé Fonseca   return "VMware, Inc.";
53aa59a937ccf41609081d3f9a4973df5478979785Brian}
54aa59a937ccf41609081d3f9a4973df5478979785Brian
55aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char *
561bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_name(struct pipe_screen *screen)
57aa59a937ccf41609081d3f9a4973df5478979785Brian{
58aa59a937ccf41609081d3f9a4973df5478979785Brian   static char buffer[128];
59aa59a937ccf41609081d3f9a4973df5478979785Brian   const char *chipset;
60aa59a937ccf41609081d3f9a4973df5478979785Brian
61835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz   switch (i915_screen(screen)->iws->pci_id) {
62aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_G:
63aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "915G";
64aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
65aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_GM:
66aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "915GM";
67aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
68aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_G:
69aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "945G";
70aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
71aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GM:
72aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "945GM";
73aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
74aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GME:
75aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "945GME";
76aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
77aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_G33_G:
78aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "G33";
79aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
80aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q35_G:
81aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "Q35";
82aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
83aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q33_G:
84aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "Q33";
85aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
868624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_G:
878624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter      chipset = "Pineview G";
888624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter      break;
898624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_M:
908624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter      chipset = "Pineview M";
918624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter      break;
92aa59a937ccf41609081d3f9a4973df5478979785Brian   default:
93aa59a937ccf41609081d3f9a4973df5478979785Brian      chipset = "unknown";
94aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
95aa59a937ccf41609081d3f9a4973df5478979785Brian   }
96aa59a937ccf41609081d3f9a4973df5478979785Brian
975b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca   util_snprintf(buffer, sizeof(buffer), "i915 (chipset: %s)", chipset);
98aa59a937ccf41609081d3f9a4973df5478979785Brian   return buffer;
99aa59a937ccf41609081d3f9a4973df5478979785Brian}
100aa59a937ccf41609081d3f9a4973df5478979785Brian
10117188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic int
102e1238b5cad3845c029f60d92c08e810274517d33José Fonsecai915_get_param(struct pipe_screen *screen, enum pipe_cap param)
10317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{
10417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   switch (param) {
10517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
10617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 8;
10798e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul   case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS:
10898e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul      return 0;
10998e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul   case PIPE_CAP_MAX_COMBINED_SAMPLERS:
11098e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul      return 8;
11117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_NPOT_TEXTURES:
11217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 1;
11317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_TWO_SIDED_STENCIL:
11417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 1;
11517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_GLSL:
11617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
11717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_ANISOTROPIC_FILTER:
11817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
11917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_POINT_SPRITE:
12017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
12117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_RENDER_TARGETS:
12217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 1;
12317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_OCCLUSION_QUERY:
12417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
125cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich   case PIPE_CAP_TIMER_QUERY:
126cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich      return 0;
12717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_TEXTURE_SHADOW_MAP:
12817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 1;
12917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
130e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_2D_LEVELS;
13117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
132e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_3D_LEVELS;
13317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
134e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_2D_LEVELS;
1356c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
1366c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
1376c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri      return 1;
1386c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
1396c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
1406c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri      return 0;
1414bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger   case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
1424bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      /* disable for now */
1434bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      return 0;
14417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   default:
14517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
14617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   }
14717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian}
14817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
149a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieristatic int
150a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbierii915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
151a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri{
152a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   switch(shader) {
153a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   case PIPE_SHADER_VERTEX:
154a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      return draw_get_shader_param(shader, param);
155a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   case PIPE_SHADER_FRAGMENT:
156a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      break;
157a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   default:
158a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      return 0;
159a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   }
160a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri
161a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   /* XXX: these are just shader model 2.0 values, fix this! */
162a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   switch(param) {
163a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
164a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 96;
165a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
166a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 64;
167a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
168a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 32;
169a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
170a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 8;
171a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
172a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 0;
173a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_INPUTS:
174a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 10;
175a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_CONSTS:
176a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 32;
177a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
178a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 1;
179a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_TEMPS:
180a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 12; /* XXX: 12 -> 32 ? */
181a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_ADDRS:
182a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 0;
183a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_MAX_PREDS:
184a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 0;
185a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
186a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         return 0;
1875bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák      case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
1885bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák      case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
1895bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák      case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
1905bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák      case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
1915bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák         return 1;
192a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      default:
193706380cf7da3d376b22bc32cb5decfb66665053dVinson Lee         assert(0);
194706380cf7da3d376b22bc32cb5decfb66665053dVinson Lee         return 0;
195a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   }
196a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri}
197a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri
19817188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic float
199e1238b5cad3845c029f60d92c08e810274517d33José Fonsecai915_get_paramf(struct pipe_screen *screen, enum pipe_cap param)
20017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{
20117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   switch (param) {
20217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_LINE_WIDTH:
20317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      /* fall-through */
20417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_LINE_WIDTH_AA:
20517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 7.5;
20617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
20717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_POINT_WIDTH:
20817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      /* fall-through */
20917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_POINT_WIDTH_AA:
21017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 255.0;
21117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
21217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
21317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 4.0;
21417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
21517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
21617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 16.0;
21717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
21817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   default:
21917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
22017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   }
22117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian}
22217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
223364f8cad0f8f02fd39d9c51ea0774d349121b58dBrianstatic boolean
2241bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_is_format_supported(struct pipe_screen *screen,
225bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger                         enum pipe_format format,
2261bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz                         enum pipe_texture_target target,
227bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger                         unsigned sample_count,
228bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger                         unsigned tex_usage,
2291bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz                         unsigned geom_flags)
230364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{
231364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   static const enum pipe_format tex_supported[] = {
232b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B8G8R8A8_UNORM,
233b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz      PIPE_FORMAT_B8G8R8X8_UNORM,
234b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz      PIPE_FORMAT_R8G8B8A8_UNORM,
235b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz#if 0
236b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz      PIPE_FORMAT_R8G8B8X8_UNORM,
237b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz#endif
238b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B5G6R5_UNORM,
23954f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_L8_UNORM,
24054f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_A8_UNORM,
24154f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_I8_UNORM,
242b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_L8A8_UNORM,
243b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_UYVY,
244b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_YUYV,
2454bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      /* XXX why not?
2464bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z16_UNORM, */
2474bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z24X8_UNORM,
2486fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger      PIPE_FORMAT_Z24_UNORM_S8_USCALED,
249364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      PIPE_FORMAT_NONE  /* list terminator */
250364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   };
251bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   static const enum pipe_format render_supported[] = {
252b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B8G8R8A8_UNORM,
253b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B5G6R5_UNORM,
254bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      PIPE_FORMAT_NONE  /* list terminator */
255bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   };
256bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   static const enum pipe_format depth_supported[] = {
2574bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      /* XXX why not?
2584bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z16_UNORM, */
2594bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z24X8_UNORM,
2606fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger      PIPE_FORMAT_Z24_UNORM_S8_USCALED,
261364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      PIPE_FORMAT_NONE  /* list terminator */
262364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   };
263364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   const enum pipe_format *list;
264364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   uint i;
265364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
266bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   if (sample_count > 1)
267bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      return FALSE;
268bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger
269bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   if(tex_usage & PIPE_BIND_DEPTH_STENCIL)
270bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      list = depth_supported;
271bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   else if (tex_usage & PIPE_BIND_RENDER_TARGET)
272bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      list = render_supported;
2738aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca   else
2748aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca      list = tex_supported;
275364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
276364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) {
277364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      if (list[i] == format)
278364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian         return TRUE;
279364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   }
280364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
281364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   return FALSE;
282364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian}
283364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
284d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
285d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/*
286d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Fence functions
287d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */
288d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
289d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
290d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic void
291d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_reference(struct pipe_screen *screen,
292d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     struct pipe_fence_handle **ptr,
293d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     struct pipe_fence_handle *fence)
294d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
295d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
296d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
297d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->iws->fence_reference(is->iws, ptr, fence);
298d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
299d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
300d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int
301d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_signalled(struct pipe_screen *screen,
302d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     struct pipe_fence_handle *fence,
303d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     unsigned flags)
304d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
305d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
306d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
307d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   return is->iws->fence_signalled(is->iws, fence);
308d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
309d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
310d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int
311d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_finish(struct pipe_screen *screen,
312d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                  struct pipe_fence_handle *fence,
313d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                  unsigned flags)
314d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
315d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
316d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
317d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   return is->iws->fence_finish(is->iws, fence);
318d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
319d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
320d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
321d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/*
322d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Generic functions
323d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */
324d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
325d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
326aa59a937ccf41609081d3f9a4973df5478979785Brianstatic void
3271bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_destroy_screen(struct pipe_screen *screen)
328aa59a937ccf41609081d3f9a4973df5478979785Brian{
329d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
3309dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca
331d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   if (is->iws)
332d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz      is->iws->destroy(is->iws);
3339dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca
334d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   FREE(is);
335aa59a937ccf41609081d3f9a4973df5478979785Brian}
336aa59a937ccf41609081d3f9a4973df5478979785Brian
337aa59a937ccf41609081d3f9a4973df5478979785Brian/**
338aa59a937ccf41609081d3f9a4973df5478979785Brian * Create a new i915_screen object
339aa59a937ccf41609081d3f9a4973df5478979785Brian */
340aa59a937ccf41609081d3f9a4973df5478979785Brianstruct pipe_screen *
341835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantzi915_screen_create(struct i915_winsys *iws)
342aa59a937ccf41609081d3f9a4973df5478979785Brian{
3431bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   struct i915_screen *is = CALLOC_STRUCT(i915_screen);
344aa59a937ccf41609081d3f9a4973df5478979785Brian
3451bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   if (!is)
346aa59a937ccf41609081d3f9a4973df5478979785Brian      return NULL;
347aa59a937ccf41609081d3f9a4973df5478979785Brian
348835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz   switch (iws->pci_id) {
349aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_G:
350aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_GM:
3511bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz      is->is_i945 = FALSE;
352aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
353aa59a937ccf41609081d3f9a4973df5478979785Brian
354aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_G:
355aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GM:
356aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GME:
357aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_G33_G:
358aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q33_G:
359aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q35_G:
3608624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_G:
3618624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_M:
3621bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz      is->is_i945 = TRUE;
363aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
364aa59a937ccf41609081d3f9a4973df5478979785Brian
365aa59a937ccf41609081d3f9a4973df5478979785Brian   default:
366baab98a637d526871fb77ec6f313012f49c0e998José Fonseca      debug_printf("%s: unknown pci id 0x%x, cannot create screen\n",
367835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz                   __FUNCTION__, iws->pci_id);
368520b6abdecdaba856e5ca04938e18eb83b33dfaaVinson Lee      FREE(is);
369aa59a937ccf41609081d3f9a4973df5478979785Brian      return NULL;
370aa59a937ccf41609081d3f9a4973df5478979785Brian   }
371aa59a937ccf41609081d3f9a4973df5478979785Brian
372d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->iws = iws;
373aa59a937ccf41609081d3f9a4973df5478979785Brian
374d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.winsys = NULL;
375aa59a937ccf41609081d3f9a4973df5478979785Brian
3761bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.destroy = i915_destroy_screen;
377aa59a937ccf41609081d3f9a4973df5478979785Brian
3781bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_name = i915_get_name;
3791bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_vendor = i915_get_vendor;
3801bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_param = i915_get_param;
381a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   is->base.get_shader_param = i915_get_shader_param;
3821bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_paramf = i915_get_paramf;
3831bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.is_format_supported = i915_is_format_supported;
384aa59a937ccf41609081d3f9a4973df5478979785Brian
3857f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell   is->base.context_create = i915_create_context;
3867f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell
387d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_reference = i915_fence_reference;
388d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_signalled = i915_fence_signalled;
389d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_finish = i915_fence_finish;
390d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
391287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   i915_init_screen_resource_functions(is);
392287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   i915_init_screen_surface_functions(is);
393aa59a937ccf41609081d3f9a4973df5478979785Brian
394abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz   i915_debug_init(is);
395abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz
3961bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   return &is->base;
397aa59a937ccf41609081d3f9a4973df5478979785Brian}
398