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