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
1038a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesini915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap cap)
1048a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin{
1058a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin   switch(shader) {
1068a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin   case PIPE_SHADER_VERTEX:
1078a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      switch (cap) {
1088a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
1098a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         if (debug_get_bool_option("DRAW_USE_LLVM", TRUE))
110cab2fed135bc1edf7b65ddca3236020638427061Brian Paul            return PIPE_MAX_SAMPLERS;
1118a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         else
1128a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin            return 0;
11345fc069600ddbfe07a0a0cd5280161a8c7c55dd0Stéphane Marchesin       default:
1148a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return draw_get_shader_param(shader, cap);
1158a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      }
1168a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin   case PIPE_SHADER_FRAGMENT:
117642d11da207e9becfa26a9e038db1c7520ec2aeeStéphane Marchesin      /* XXX: some of these are just shader model 2.0 values, fix this! */
1188a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      switch(cap) {
1198a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
1200b3842edb1a0bc1a2163571ef476e080f7c40b0fStéphane Marchesin         return I915_MAX_ALU_INSN + I915_MAX_TEX_INSN;
1218a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
1220b3842edb1a0bc1a2163571ef476e080f7c40b0fStéphane Marchesin         return I915_MAX_ALU_INSN;
1238a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
1240b3842edb1a0bc1a2163571ef476e080f7c40b0fStéphane Marchesin         return I915_MAX_TEX_INSN;
1258a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
1268a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 8;
1278a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
1288a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 0;
1298a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_INPUTS:
1308a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 10;
1318a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_CONSTS:
1328a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 32;
1338a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
1348a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 1;
1358a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_TEMPS:
1368a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 12; /* XXX: 12 -> 32 ? */
1378a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_ADDRS:
1388a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 0;
1398a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_PREDS:
1408a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 0;
1418a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
1428a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 0;
1438a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
1448a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
1458a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
1468a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
1478a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 1;
1488a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_SUBROUTINES:
1498a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 0;
1508a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_INTEGERS:
1518a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 0;
1528a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
1530b3842edb1a0bc1a2163571ef476e080f7c40b0fStéphane Marchesin         return I915_TEX_UNITS;
1548a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      default:
1558a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);
1568a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin         return 0;
1578a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      }
1588a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      break;
1598a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin   default:
1608a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      return 0;
1618a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin   }
1628a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin
1638a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin}
1648a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin
1658a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesinstatic int
166e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantzi915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
16717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{
16843e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
16943e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz
170e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   switch (cap) {
171e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   /* Supported features (boolean caps). */
172e7e1fd057e8cc78e7039637d045ac922bb82b8d8Jakob Bornecrantz   case PIPE_CAP_ANISOTROPIC_FILTER:
1736d86429bd99a0b7a0bc0060a760f35c297b1dc5aJakob Bornecrantz   case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
17417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_NPOT_TEXTURES:
17598ce1373e47d05d7150933c391fdeddbc897a3cdStéphane Marchesin   case PIPE_CAP_POINT_SPRITE:
176e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_PRIMITIVE_RESTART: /* draw module */
177e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_TEXTURE_SHADOW_MAP:
17817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_TWO_SIDED_STENCIL:
179a2537bbc95bfeaaf50e5f0895d1f5741c3d7e349Stéphane Marchesin   case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
180e7cdcefbee6c8bffdc421f38d97578180e7991b5Jakob Bornecrantz   case PIPE_CAP_BLEND_EQUATION_SEPARATE:
1819977fb42ac233e4b5a3a3ab721f1af2d9e9982c0Stéphane Marchesin   case PIPE_CAP_TGSI_INSTANCEID:
182bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák   case PIPE_CAP_VERTEX_COLOR_CLAMPED:
183978c1aa1d0f6fd9a188762a8534de33fc63eeea0Marek Olšák   case PIPE_CAP_USER_VERTEX_BUFFERS:
184437ab1d6df7282770ee869180446db36c2dbdfa8Marek Olšák   case PIPE_CAP_USER_INDEX_BUFFERS:
185437ab1d6df7282770ee869180446db36c2dbdfa8Marek Olšák   case PIPE_CAP_USER_CONSTANT_BUFFERS:
186bfe507bcfffa7a0f5688172911c677186a0d5a87Stéphane Marchesin      return 1;
187e7cdcefbee6c8bffdc421f38d97578180e7991b5Jakob Bornecrantz
188e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   /* Unsupported features (boolean caps). */
189379429137238e79296b8222c0e13d7d961910633Marek Olšák   case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
190dc4c821f0817a3db716f965692fb701079f66340Marek Olšák   case PIPE_CAP_DEPTH_CLIP_DISABLE:
191e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_INDEP_BLEND_ENABLE:
192e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_INDEP_BLEND_FUNC:
193e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_SHADER_STENCIL_EXPORT:
194e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
195e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_TEXTURE_SWIZZLE:
196cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich   case PIPE_CAP_TIMER_QUERY:
197893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin   case PIPE_CAP_SM3:
198893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin   case PIPE_CAP_SEAMLESS_CUBE_MAP:
199893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin   case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
20067e6a40605c482617afa9bd698003ea15e8f8f6eStéphane Marchesin   case PIPE_CAP_SCALED_RESOLVE:
201bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák   case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
202893b92adffe25a42468cb310dc5d13642472f0cbStéphane Marchesin   case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
203b7cd18bc49aad644a721593e16e9a59226cf2e4aStéphane Marchesin   case PIPE_CAP_CONDITIONAL_RENDER:
204b7cd18bc49aad644a721593e16e9a59226cf2e4aStéphane Marchesin   case PIPE_CAP_TEXTURE_BARRIER:
2053c01aefe5f9b8ffb31bbdd9ed5b200e830478a81Stéphane Marchesin   case PIPE_CAP_TGSI_CAN_COMPACT_VARYINGS:
2063c01aefe5f9b8ffb31bbdd9ed5b200e830478a81Stéphane Marchesin   case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS:
207bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák   case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
2088b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller   case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
209af372129e5c1722a3d53dd1fc2f3409207c12f7eFredrik Höglund   case PIPE_CAP_START_INSTANCE:
210bcc735aaca3b305d05c28e4076996d91b19d80fdMarek Olšák   case PIPE_CAP_QUERY_TIMESTAMP:
211cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich      return 0;
212e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz
2131b749dc34f8d83cf3dfa863279b1fe2b356d34b2Marek Olšák   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
2141b749dc34f8d83cf3dfa863279b1fe2b356d34b2Marek Olšák      return 16;
2151b749dc34f8d83cf3dfa863279b1fe2b356d34b2Marek Olšák
21643e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz   /* Features we can lie about (boolean caps). */
21743e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz   case PIPE_CAP_OCCLUSION_QUERY:
21843e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz      return is->debug.lie ? 1 : 0;
21943e6fe5549edb7e837480f28b1262357568d54eaJakob Bornecrantz
220e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   /* Texturing. */
221e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_MAX_COMBINED_SAMPLERS:
2228a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin      return i915_get_shader_param(screen,
2238a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin                                   PIPE_SHADER_VERTEX,
2248a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin                                   PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS) +
2258a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin             i915_get_shader_param(screen,
2268a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin                                   PIPE_SHADER_FRAGMENT,
2278a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin                                   PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS);
22817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
229e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_2D_LEVELS;
23017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
231e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_3D_LEVELS;
23217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
233e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul      return I915_MAX_TEXTURE_2D_LEVELS;
2347cba40306eec79b54128ca3bf56aa96ae56c5fd4Stéphane Marchesin   case PIPE_CAP_MIN_TEXEL_OFFSET:
2357cba40306eec79b54128ca3bf56aa96ae56c5fd4Stéphane Marchesin   case PIPE_CAP_MAX_TEXEL_OFFSET:
23667e6a40605c482617afa9bd698003ea15e8f8f6eStéphane Marchesin   case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:
23767e6a40605c482617afa9bd698003ea15e8f8f6eStéphane Marchesin   case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS:
23867e6a40605c482617afa9bd698003ea15e8f8f6eStéphane Marchesin   case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS:
2397cba40306eec79b54128ca3bf56aa96ae56c5fd4Stéphane Marchesin      return 0;
240e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz
241e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   /* Render targets. */
242e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   case PIPE_CAP_MAX_RENDER_TARGETS:
243e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz      return 1;
244e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz
245e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   /* Fragment coordinate conventions. */
2466c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
2476c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
2486c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri      return 1;
2496c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
2506c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
2516c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri      return 0;
252e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz
25317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   default:
254ac85ab066b7e3a7ee818849491b97a499038190bVinson Lee      debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);
25517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
25617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   }
25717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian}
25817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
25917188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic float
260bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšáki915_get_paramf(struct pipe_screen *screen, enum pipe_capf cap)
26117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{
262e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz   switch(cap) {
263bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák   case PIPE_CAPF_MAX_LINE_WIDTH:
26417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      /* fall-through */
265bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák   case PIPE_CAPF_MAX_LINE_WIDTH_AA:
26617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 7.5;
26717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
268bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák   case PIPE_CAPF_MAX_POINT_WIDTH:
26917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      /* fall-through */
270bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák   case PIPE_CAPF_MAX_POINT_WIDTH_AA:
27117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 255.0;
27217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
273bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák   case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
27417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 4.0;
27517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
276bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák   case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
27717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 16.0;
27817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
27917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   default:
280ac85ab066b7e3a7ee818849491b97a499038190bVinson Lee      debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);
28117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian      return 0;
28217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian   }
28317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian}
28417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian
2851a69b50b3b441ce8f7a00af3a7f02c37df50f6c3Stéphane Marchesinboolean
2861bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_is_format_supported(struct pipe_screen *screen,
287bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger                         enum pipe_format format,
2881bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz                         enum pipe_texture_target target,
289bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger                         unsigned sample_count,
290e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                         unsigned tex_usage)
291364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{
292364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   static const enum pipe_format tex_supported[] = {
293b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B8G8R8A8_UNORM,
29445fc069600ddbfe07a0a0cd5280161a8c7c55dd0Stéphane Marchesin      PIPE_FORMAT_B8G8R8A8_SRGB,
295b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz      PIPE_FORMAT_B8G8R8X8_UNORM,
296465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin      PIPE_FORMAT_R8G8B8A8_UNORM,
297465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin      PIPE_FORMAT_R8G8B8X8_UNORM,
298b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B5G6R5_UNORM,
2992e481e5fc4c99d353cc5b21dacf1470847a11646Stéphane Marchesin      PIPE_FORMAT_B10G10R10A2_UNORM,
30054f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_L8_UNORM,
30154f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_A8_UNORM,
30254f94a790e4488445347abcff9a636a9c440d7f9Brian Paul      PIPE_FORMAT_I8_UNORM,
303b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_L8A8_UNORM,
304b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_UYVY,
305b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_YUYV,
3064bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      /* XXX why not?
3074bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z16_UNORM, */
308608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert      PIPE_FORMAT_DXT1_RGB,
309608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert      PIPE_FORMAT_DXT1_RGBA,
310608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert      PIPE_FORMAT_DXT3_RGBA,
311608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert      PIPE_FORMAT_DXT5_RGBA,
3124bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z24X8_UNORM,
313866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie      PIPE_FORMAT_Z24_UNORM_S8_UINT,
314364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      PIPE_FORMAT_NONE  /* list terminator */
315364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   };
316bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   static const enum pipe_format render_supported[] = {
317b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B8G8R8A8_UNORM,
3181f3c5eae5c4be582e50c2d4d7950424d86059c45Vasily Khoruzhick      PIPE_FORMAT_B8G8R8X8_UNORM,
319465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin      PIPE_FORMAT_R8G8B8A8_UNORM,
3201f3c5eae5c4be582e50c2d4d7950424d86059c45Vasily Khoruzhick      PIPE_FORMAT_R8G8B8X8_UNORM,
321b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca      PIPE_FORMAT_B5G6R5_UNORM,
3222e481e5fc4c99d353cc5b21dacf1470847a11646Stéphane Marchesin      PIPE_FORMAT_B10G10R10A2_UNORM,
323465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin      PIPE_FORMAT_L8_UNORM,
324465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin      PIPE_FORMAT_A8_UNORM,
325465183c6ae594ad399f72ade027e49adcb1f763bStéphane Marchesin      PIPE_FORMAT_I8_UNORM,
326bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      PIPE_FORMAT_NONE  /* list terminator */
327bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   };
328bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   static const enum pipe_format depth_supported[] = {
3294bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      /* XXX why not?
3304bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z16_UNORM, */
3314bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger      PIPE_FORMAT_Z24X8_UNORM,
332866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie      PIPE_FORMAT_Z24_UNORM_S8_UINT,
333364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      PIPE_FORMAT_NONE  /* list terminator */
334364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   };
335364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   const enum pipe_format *list;
336364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   uint i;
337364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
33875fa5c99a86c1ae0f8a4fecc016a5f82da9ae80aMarek Olšák   if (!util_format_is_supported(format, tex_usage))
33975fa5c99a86c1ae0f8a4fecc016a5f82da9ae80aMarek Olšák      return FALSE;
34075fa5c99a86c1ae0f8a4fecc016a5f82da9ae80aMarek Olšák
341bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   if (sample_count > 1)
342bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      return FALSE;
343bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger
344bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   if(tex_usage & PIPE_BIND_DEPTH_STENCIL)
345bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      list = depth_supported;
346bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger   else if (tex_usage & PIPE_BIND_RENDER_TARGET)
347bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger      list = render_supported;
34879eafc14ca70a684b4ea8b89723c1dad3e61eb3dMarek Olšák   else if (tex_usage & PIPE_BIND_SAMPLER_VIEW)
3498aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca      list = tex_supported;
35079eafc14ca70a684b4ea8b89723c1dad3e61eb3dMarek Olšák   else
35179eafc14ca70a684b4ea8b89723c1dad3e61eb3dMarek Olšák      return TRUE; /* PIPE_BIND_{VERTEX,INDEX}_BUFFER */
352364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
353364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) {
354364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      if (list[i] == format)
355364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian         return TRUE;
356364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   }
357364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
358364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   return FALSE;
359364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian}
360364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
361d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
362d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/*
363d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Fence functions
364d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */
365d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
366d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
367d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic void
368d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_reference(struct pipe_screen *screen,
369d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     struct pipe_fence_handle **ptr,
370d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                     struct pipe_fence_handle *fence)
371d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
372d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
373d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
374d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->iws->fence_reference(is->iws, ptr, fence);
375d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
376d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
377bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšákstatic boolean
378d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_signalled(struct pipe_screen *screen,
379bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšák                     struct pipe_fence_handle *fence)
380d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
381d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
382d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
3832b4afdba05abe3408f6347be82465b6420f50aabStéphane Marchesin   return is->iws->fence_signalled(is->iws, fence) == 1;
384d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
385d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
386bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšákstatic boolean
387d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_finish(struct pipe_screen *screen,
388d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz                  struct pipe_fence_handle *fence,
389b39bccbd4ed71e9585da4cf5acf7b887b2e90899Marek Olšák                  uint64_t timeout)
390d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{
391d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
392d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
3932b4afdba05abe3408f6347be82465b6420f50aabStéphane Marchesin   return is->iws->fence_finish(is->iws, fence) == 1;
394d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz}
395d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
396d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
397d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/*
398d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Generic functions
399d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */
400d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
401d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
402aa59a937ccf41609081d3f9a4973df5478979785Brianstatic void
403ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantzi915_flush_frontbuffer(struct pipe_screen *screen,
404ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz                       struct pipe_resource *resource,
405ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz                       unsigned level, unsigned layer,
406ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz                       void *winsys_drawable_handle)
407ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz{
408ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   /* XXX: Dummy right now. */
409ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)screen;
410ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)resource;
411ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)level;
412ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)layer;
413ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   (void)winsys_drawable_handle;
414ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz}
415ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz
416ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantzstatic void
4171bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_destroy_screen(struct pipe_screen *screen)
418aa59a937ccf41609081d3f9a4973df5478979785Brian{
419d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct i915_screen *is = i915_screen(screen);
4209dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca
421d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   if (is->iws)
422d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz      is->iws->destroy(is->iws);
4239dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca
424d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   FREE(is);
425aa59a937ccf41609081d3f9a4973df5478979785Brian}
426aa59a937ccf41609081d3f9a4973df5478979785Brian
427aa59a937ccf41609081d3f9a4973df5478979785Brian/**
428aa59a937ccf41609081d3f9a4973df5478979785Brian * Create a new i915_screen object
429aa59a937ccf41609081d3f9a4973df5478979785Brian */
430aa59a937ccf41609081d3f9a4973df5478979785Brianstruct pipe_screen *
431835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantzi915_screen_create(struct i915_winsys *iws)
432aa59a937ccf41609081d3f9a4973df5478979785Brian{
4331bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   struct i915_screen *is = CALLOC_STRUCT(i915_screen);
434aa59a937ccf41609081d3f9a4973df5478979785Brian
4351bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   if (!is)
436aa59a937ccf41609081d3f9a4973df5478979785Brian      return NULL;
437aa59a937ccf41609081d3f9a4973df5478979785Brian
438835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz   switch (iws->pci_id) {
439aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_G:
440aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I915_GM:
4411bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz      is->is_i945 = FALSE;
442aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
443aa59a937ccf41609081d3f9a4973df5478979785Brian
444aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_G:
445aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GM:
446aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_I945_GME:
447aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_G33_G:
448aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q33_G:
449aa59a937ccf41609081d3f9a4973df5478979785Brian   case PCI_CHIP_Q35_G:
4508624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_G:
4518624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter   case PCI_CHIP_PINEVIEW_M:
4521bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz      is->is_i945 = TRUE;
453aa59a937ccf41609081d3f9a4973df5478979785Brian      break;
454aa59a937ccf41609081d3f9a4973df5478979785Brian
455aa59a937ccf41609081d3f9a4973df5478979785Brian   default:
456baab98a637d526871fb77ec6f313012f49c0e998José Fonseca      debug_printf("%s: unknown pci id 0x%x, cannot create screen\n",
457835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz                   __FUNCTION__, iws->pci_id);
458520b6abdecdaba856e5ca04938e18eb83b33dfaaVinson Lee      FREE(is);
459aa59a937ccf41609081d3f9a4973df5478979785Brian      return NULL;
460aa59a937ccf41609081d3f9a4973df5478979785Brian   }
461aa59a937ccf41609081d3f9a4973df5478979785Brian
462d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->iws = iws;
463aa59a937ccf41609081d3f9a4973df5478979785Brian
4641bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.destroy = i915_destroy_screen;
465ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz   is->base.flush_frontbuffer = i915_flush_frontbuffer;
466aa59a937ccf41609081d3f9a4973df5478979785Brian
4671bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_name = i915_get_name;
4681bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_vendor = i915_get_vendor;
4691bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_param = i915_get_param;
470a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   is->base.get_shader_param = i915_get_shader_param;
4711bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.get_paramf = i915_get_paramf;
4721bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   is->base.is_format_supported = i915_is_format_supported;
473aa59a937ccf41609081d3f9a4973df5478979785Brian
4747f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell   is->base.context_create = i915_create_context;
4757f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell
476d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_reference = i915_fence_reference;
477d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_signalled = i915_fence_signalled;
478d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   is->base.fence_finish = i915_fence_finish;
479d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
480287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   i915_init_screen_resource_functions(is);
481aa59a937ccf41609081d3f9a4973df5478979785Brian
482abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz   i915_debug_init(is);
483abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz
484608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert   util_format_s3tc_init();
485608a4a17feea9fba2812d4e5c01dd6dbadc5d6e0Christopher Egert
4861bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz   return &is->base;
487aa59a937ccf41609081d3f9a4973df5478979785Brian}
488