i915_screen.c revision e3c9bf1a670dd6924537d2e04d522ef899ee5b57
1aa59a937ccf41609081d3f9a4973df5478979785Brian/************************************************************************** 2aa59a937ccf41609081d3f9a4973df5478979785Brian * 3aa59a937ccf41609081d3f9a4973df5478979785Brian * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4aa59a937ccf41609081d3f9a4973df5478979785Brian * All Rights Reserved. 5aa59a937ccf41609081d3f9a4973df5478979785Brian * 6aa59a937ccf41609081d3f9a4973df5478979785Brian * Permission is hereby granted, free of charge, to any person obtaining a 7aa59a937ccf41609081d3f9a4973df5478979785Brian * copy of this software and associated documentation files (the 8aa59a937ccf41609081d3f9a4973df5478979785Brian * "Software"), to deal in the Software without restriction, including 9aa59a937ccf41609081d3f9a4973df5478979785Brian * without limitation the rights to use, copy, modify, merge, publish, 10aa59a937ccf41609081d3f9a4973df5478979785Brian * distribute, sub license, and/or sell copies of the Software, and to 11aa59a937ccf41609081d3f9a4973df5478979785Brian * permit persons to whom the Software is furnished to do so, subject to 12aa59a937ccf41609081d3f9a4973df5478979785Brian * the following conditions: 13aa59a937ccf41609081d3f9a4973df5478979785Brian * 14aa59a937ccf41609081d3f9a4973df5478979785Brian * The above copyright notice and this permission notice (including the 15aa59a937ccf41609081d3f9a4973df5478979785Brian * next paragraph) shall be included in all copies or substantial portions 16aa59a937ccf41609081d3f9a4973df5478979785Brian * of the Software. 17aa59a937ccf41609081d3f9a4973df5478979785Brian * 18aa59a937ccf41609081d3f9a4973df5478979785Brian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19aa59a937ccf41609081d3f9a4973df5478979785Brian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20aa59a937ccf41609081d3f9a4973df5478979785Brian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21aa59a937ccf41609081d3f9a4973df5478979785Brian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22aa59a937ccf41609081d3f9a4973df5478979785Brian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23aa59a937ccf41609081d3f9a4973df5478979785Brian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24aa59a937ccf41609081d3f9a4973df5478979785Brian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25aa59a937ccf41609081d3f9a4973df5478979785Brian * 26aa59a937ccf41609081d3f9a4973df5478979785Brian **************************************************************************/ 27aa59a937ccf41609081d3f9a4973df5478979785Brian 28aa59a937ccf41609081d3f9a4973df5478979785Brian 29d4d48c0579f7eb8d889ad325e8f1c9b4a95f6ed7Vinson Lee#include "draw/draw_context.h" 3028486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 31d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz#include "util/u_memory.h" 325b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca#include "util/u_string.h" 33aa59a937ccf41609081d3f9a4973df5478979785Brian 34aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_reg.h" 35abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz#include "i915_debug.h" 36f81b7a6285455e838adb061dcca90036c9f99522José Fonseca#include "i915_context.h" 37aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_screen.h" 38287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "i915_resource.h" 39bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#include "i915_winsys.h" 40c7015877beedd9831402755dbc58afddcbbd5339Jakob Bornecrantz#include "i915_public.h" 41d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 42d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 43d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 44d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Probe functions 45d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 46aa59a937ccf41609081d3f9a4973df5478979785Brian 47aa59a937ccf41609081d3f9a4973df5478979785Brian 48aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char * 491bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_vendor(struct pipe_screen *screen) 50aa59a937ccf41609081d3f9a4973df5478979785Brian{ 5121a949365d1de2f1fea6cb87c6f389e30156566fJosé Fonseca return "VMware, Inc."; 52aa59a937ccf41609081d3f9a4973df5478979785Brian} 53aa59a937ccf41609081d3f9a4973df5478979785Brian 54aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char * 551bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_name(struct pipe_screen *screen) 56aa59a937ccf41609081d3f9a4973df5478979785Brian{ 57aa59a937ccf41609081d3f9a4973df5478979785Brian static char buffer[128]; 58aa59a937ccf41609081d3f9a4973df5478979785Brian const char *chipset; 59aa59a937ccf41609081d3f9a4973df5478979785Brian 60835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz switch (i915_screen(screen)->iws->pci_id) { 61aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_G: 62aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "915G"; 63aa59a937ccf41609081d3f9a4973df5478979785Brian break; 64aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_GM: 65aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "915GM"; 66aa59a937ccf41609081d3f9a4973df5478979785Brian break; 67aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_G: 68aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945G"; 69aa59a937ccf41609081d3f9a4973df5478979785Brian break; 70aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GM: 71aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945GM"; 72aa59a937ccf41609081d3f9a4973df5478979785Brian break; 73aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GME: 74aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945GME"; 75aa59a937ccf41609081d3f9a4973df5478979785Brian break; 76aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_G33_G: 77aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "G33"; 78aa59a937ccf41609081d3f9a4973df5478979785Brian break; 79aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q35_G: 80aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "Q35"; 81aa59a937ccf41609081d3f9a4973df5478979785Brian break; 82aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q33_G: 83aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "Q33"; 84aa59a937ccf41609081d3f9a4973df5478979785Brian break; 858624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_G: 868624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter chipset = "Pineview G"; 878624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter break; 888624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_M: 898624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter chipset = "Pineview M"; 908624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter break; 91aa59a937ccf41609081d3f9a4973df5478979785Brian default: 92aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "unknown"; 93aa59a937ccf41609081d3f9a4973df5478979785Brian break; 94aa59a937ccf41609081d3f9a4973df5478979785Brian } 95aa59a937ccf41609081d3f9a4973df5478979785Brian 965b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca util_snprintf(buffer, sizeof(buffer), "i915 (chipset: %s)", chipset); 97aa59a937ccf41609081d3f9a4973df5478979785Brian return buffer; 98aa59a937ccf41609081d3f9a4973df5478979785Brian} 99aa59a937ccf41609081d3f9a4973df5478979785Brian 10017188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic int 101e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantzi915_get_param(struct pipe_screen *screen, enum pipe_cap cap) 10217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{ 103e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz switch (cap) { 104e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Supported features (boolean caps). */ 10517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_NPOT_TEXTURES: 106e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_PRIMITIVE_RESTART: /* draw module */ 107e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_TEXTURE_SHADOW_MAP: 10817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_TWO_SIDED_STENCIL: 10917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 110e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 111e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Unsupported features (boolean caps). */ 11217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_ANISOTROPIC_FILTER: 113e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_ARRAY_TEXTURES: 114e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_BLEND_EQUATION_SEPARATE: 115e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_DEPTH_CLAMP: 116e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE: /* disable for now */ 117e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_GLSL: 118e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_INDEP_BLEND_ENABLE: 119e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_INDEP_BLEND_FUNC: 120e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_INSTANCED_DRAWING: /* draw module? */ 12117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_OCCLUSION_QUERY: 122e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_POINT_SPRITE: 123e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_SHADER_STENCIL_EXPORT: 124e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_TEXTURE_MIRROR_CLAMP: 125e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_TEXTURE_MIRROR_REPEAT: 126e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_TEXTURE_SWIZZLE: 127cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich case PIPE_CAP_TIMER_QUERY: 128cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich return 0; 129e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 130e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Texturing. */ 131e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS: 132e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_MAX_COMBINED_SAMPLERS: 133e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz return 8; 134e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: 135e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz return 0; 13617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: 137e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_2D_LEVELS; 13817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: 139e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_3D_LEVELS; 14017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: 141e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_2D_LEVELS; 142e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 143e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Render targets. */ 144e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz case PIPE_CAP_MAX_RENDER_TARGETS: 145e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz return 1; 146e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 147e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz /* Fragment coordinate conventions. */ 1486c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT: 1496c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: 1506c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri return 1; 1516c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT: 1526c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: 1536c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri return 0; 154e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz 15517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian default: 156e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz debug_printf("%s: Unkown cap %u.\n", __FUNCTION__, cap); 15717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 15817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian } 15917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian} 16017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 161a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieristatic int 162e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantzi915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap cap) 163a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri{ 164a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri switch(shader) { 165a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_VERTEX: 166e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz return draw_get_shader_param(shader, cap); 167a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_FRAGMENT: 168a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri break; 169a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri default: 170a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 171a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 172a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 173a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri /* XXX: these are just shader model 2.0 values, fix this! */ 174e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz switch(cap) { 175a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_INSTRUCTIONS: 176a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 96; 177a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS: 178a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 64; 179a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS: 180a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 32; 181a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS: 182a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 8; 183a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: 184a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 185a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_INPUTS: 186a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 10; 187a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONSTS: 188a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 32; 189a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: 190a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 1; 191a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEMPS: 192a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 12; /* XXX: 12 -> 32 ? */ 193a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_ADDRS: 194a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 195a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_PREDS: 196a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 197a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: 198a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 1995bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR: 2005bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR: 2015bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: 2025bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: 2035bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák return 1; 2049aa089eac05ebefafb6610b4a7e209b2fd1e93f6Marek Olšák case PIPE_SHADER_CAP_SUBROUTINES: 2059aa089eac05ebefafb6610b4a7e209b2fd1e93f6Marek Olšák return 0; 206a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri default: 207e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz debug_printf("%s: Unkown cap %u.\n", __FUNCTION__, cap); 208706380cf7da3d376b22bc32cb5decfb66665053dVinson Lee return 0; 209a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 210a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri} 211a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 21217188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic float 213e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantzi915_get_paramf(struct pipe_screen *screen, enum pipe_cap cap) 21417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{ 215e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz switch(cap) { 21617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_LINE_WIDTH: 21717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian /* fall-through */ 21817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_LINE_WIDTH_AA: 21917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 7.5; 22017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 22117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_POINT_WIDTH: 22217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian /* fall-through */ 22317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_POINT_WIDTH_AA: 22417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 255.0; 22517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 22617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: 22717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 4.0; 22817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 22917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: 23017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 16.0; 23117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 23217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian default: 233e3c9bf1a670dd6924537d2e04d522ef899ee5b57Jakob Bornecrantz debug_printf("%s: Unkown cap %u.\n", __FUNCTION__, cap); 23417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 23517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian } 23617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian} 23717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 238364f8cad0f8f02fd39d9c51ea0774d349121b58dBrianstatic boolean 2391bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_is_format_supported(struct pipe_screen *screen, 240bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger enum pipe_format format, 2411bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz enum pipe_texture_target target, 242bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger unsigned sample_count, 243bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger unsigned tex_usage, 2441bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz unsigned geom_flags) 245364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{ 246364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian static const enum pipe_format tex_supported[] = { 247b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B8G8R8A8_UNORM, 248b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz PIPE_FORMAT_B8G8R8X8_UNORM, 249b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B5G6R5_UNORM, 25054f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_L8_UNORM, 25154f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_A8_UNORM, 25254f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_I8_UNORM, 253b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_L8A8_UNORM, 254b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_UYVY, 255b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_YUYV, 2564bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* XXX why not? 2574bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z16_UNORM, */ 2584bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z24X8_UNORM, 2596fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger PIPE_FORMAT_Z24_UNORM_S8_USCALED, 260364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian PIPE_FORMAT_NONE /* list terminator */ 261364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian }; 262bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger static const enum pipe_format render_supported[] = { 263b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B8G8R8A8_UNORM, 264b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B5G6R5_UNORM, 265bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger PIPE_FORMAT_NONE /* list terminator */ 266bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger }; 267bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger static const enum pipe_format depth_supported[] = { 2684bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* XXX why not? 2694bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z16_UNORM, */ 2704bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z24X8_UNORM, 2716fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger PIPE_FORMAT_Z24_UNORM_S8_USCALED, 272364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian PIPE_FORMAT_NONE /* list terminator */ 273364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian }; 274364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian const enum pipe_format *list; 275364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian uint i; 276364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 277bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger if (sample_count > 1) 278bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger return FALSE; 279bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger 280bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger if(tex_usage & PIPE_BIND_DEPTH_STENCIL) 281bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger list = depth_supported; 282bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger else if (tex_usage & PIPE_BIND_RENDER_TARGET) 283bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger list = render_supported; 2848aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca else 2858aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca list = tex_supported; 286364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 287364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) { 288364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian if (list[i] == format) 289364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian return TRUE; 290364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian } 291364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 292364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian return FALSE; 293364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian} 294364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 295d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 296d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 297d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Fence functions 298d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 299d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 300d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 301d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic void 302d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_reference(struct pipe_screen *screen, 303d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle **ptr, 304d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence) 305d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 306d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 307d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 308d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws->fence_reference(is->iws, ptr, fence); 309d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 310d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 311d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int 312d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_signalled(struct pipe_screen *screen, 313d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence, 314d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz unsigned flags) 315d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 316d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 317d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 318d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz return is->iws->fence_signalled(is->iws, fence); 319d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 320d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 321d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int 322d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_finish(struct pipe_screen *screen, 323d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence, 324d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz unsigned flags) 325d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 326d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 327d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 328d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz return is->iws->fence_finish(is->iws, fence); 329d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 330d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 331d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 332d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 333d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Generic functions 334d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 335d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 336d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 337aa59a937ccf41609081d3f9a4973df5478979785Brianstatic void 338ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantzi915_flush_frontbuffer(struct pipe_screen *screen, 339ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz struct pipe_resource *resource, 340ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz unsigned level, unsigned layer, 341ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz void *winsys_drawable_handle) 342ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz{ 343ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz /* XXX: Dummy right now. */ 344ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)screen; 345ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)resource; 346ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)level; 347ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)layer; 348ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz (void)winsys_drawable_handle; 349ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz} 350ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz 351ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantzstatic void 3521bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_destroy_screen(struct pipe_screen *screen) 353aa59a937ccf41609081d3f9a4973df5478979785Brian{ 354d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 3559dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 356d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz if (is->iws) 357d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws->destroy(is->iws); 3589dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 359d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz FREE(is); 360aa59a937ccf41609081d3f9a4973df5478979785Brian} 361aa59a937ccf41609081d3f9a4973df5478979785Brian 362aa59a937ccf41609081d3f9a4973df5478979785Brian/** 363aa59a937ccf41609081d3f9a4973df5478979785Brian * Create a new i915_screen object 364aa59a937ccf41609081d3f9a4973df5478979785Brian */ 365aa59a937ccf41609081d3f9a4973df5478979785Brianstruct pipe_screen * 366835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantzi915_screen_create(struct i915_winsys *iws) 367aa59a937ccf41609081d3f9a4973df5478979785Brian{ 3681bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz struct i915_screen *is = CALLOC_STRUCT(i915_screen); 369aa59a937ccf41609081d3f9a4973df5478979785Brian 3701bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz if (!is) 371aa59a937ccf41609081d3f9a4973df5478979785Brian return NULL; 372aa59a937ccf41609081d3f9a4973df5478979785Brian 373835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz switch (iws->pci_id) { 374aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_G: 375aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_GM: 3761bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->is_i945 = FALSE; 377aa59a937ccf41609081d3f9a4973df5478979785Brian break; 378aa59a937ccf41609081d3f9a4973df5478979785Brian 379aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_G: 380aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GM: 381aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GME: 382aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_G33_G: 383aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q33_G: 384aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q35_G: 3858624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_G: 3868624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_M: 3871bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->is_i945 = TRUE; 388aa59a937ccf41609081d3f9a4973df5478979785Brian break; 389aa59a937ccf41609081d3f9a4973df5478979785Brian 390aa59a937ccf41609081d3f9a4973df5478979785Brian default: 391baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf("%s: unknown pci id 0x%x, cannot create screen\n", 392835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz __FUNCTION__, iws->pci_id); 393520b6abdecdaba856e5ca04938e18eb83b33dfaaVinson Lee FREE(is); 394aa59a937ccf41609081d3f9a4973df5478979785Brian return NULL; 395aa59a937ccf41609081d3f9a4973df5478979785Brian } 396aa59a937ccf41609081d3f9a4973df5478979785Brian 397d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws = iws; 398aa59a937ccf41609081d3f9a4973df5478979785Brian 399d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.winsys = NULL; 400aa59a937ccf41609081d3f9a4973df5478979785Brian 4011bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.destroy = i915_destroy_screen; 402ec3c5ac5924d0daab424215a45ea3a089b9df54fJakob Bornecrantz is->base.flush_frontbuffer = i915_flush_frontbuffer; 403aa59a937ccf41609081d3f9a4973df5478979785Brian 4041bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_name = i915_get_name; 4051bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_vendor = i915_get_vendor; 4061bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_param = i915_get_param; 407a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri is->base.get_shader_param = i915_get_shader_param; 4081bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_paramf = i915_get_paramf; 4091bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.is_format_supported = i915_is_format_supported; 410aa59a937ccf41609081d3f9a4973df5478979785Brian 4117f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell is->base.context_create = i915_create_context; 4127f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 413d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_reference = i915_fence_reference; 414d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_signalled = i915_fence_signalled; 415d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_finish = i915_fence_finish; 416d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 417287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell i915_init_screen_resource_functions(is); 418aa59a937ccf41609081d3f9a4973df5478979785Brian 419abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz i915_debug_init(is); 420abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 4211bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz return &is->base; 422aa59a937ccf41609081d3f9a4973df5478979785Brian} 423