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