i915_screen.c revision 8624fe7a49f2bd42d17f79d504078ed58065f579
1aa59a937ccf41609081d3f9a4973df5478979785Brian/************************************************************************** 2aa59a937ccf41609081d3f9a4973df5478979785Brian * 3aa59a937ccf41609081d3f9a4973df5478979785Brian * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4aa59a937ccf41609081d3f9a4973df5478979785Brian * All Rights Reserved. 5aa59a937ccf41609081d3f9a4973df5478979785Brian * 6aa59a937ccf41609081d3f9a4973df5478979785Brian * Permission is hereby granted, free of charge, to any person obtaining a 7aa59a937ccf41609081d3f9a4973df5478979785Brian * copy of this software and associated documentation files (the 8aa59a937ccf41609081d3f9a4973df5478979785Brian * "Software"), to deal in the Software without restriction, including 9aa59a937ccf41609081d3f9a4973df5478979785Brian * without limitation the rights to use, copy, modify, merge, publish, 10aa59a937ccf41609081d3f9a4973df5478979785Brian * distribute, sub license, and/or sell copies of the Software, and to 11aa59a937ccf41609081d3f9a4973df5478979785Brian * permit persons to whom the Software is furnished to do so, subject to 12aa59a937ccf41609081d3f9a4973df5478979785Brian * the following conditions: 13aa59a937ccf41609081d3f9a4973df5478979785Brian * 14aa59a937ccf41609081d3f9a4973df5478979785Brian * The above copyright notice and this permission notice (including the 15aa59a937ccf41609081d3f9a4973df5478979785Brian * next paragraph) shall be included in all copies or substantial portions 16aa59a937ccf41609081d3f9a4973df5478979785Brian * of the Software. 17aa59a937ccf41609081d3f9a4973df5478979785Brian * 18aa59a937ccf41609081d3f9a4973df5478979785Brian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19aa59a937ccf41609081d3f9a4973df5478979785Brian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20aa59a937ccf41609081d3f9a4973df5478979785Brian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21aa59a937ccf41609081d3f9a4973df5478979785Brian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22aa59a937ccf41609081d3f9a4973df5478979785Brian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23aa59a937ccf41609081d3f9a4973df5478979785Brian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24aa59a937ccf41609081d3f9a4973df5478979785Brian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25aa59a937ccf41609081d3f9a4973df5478979785Brian * 26aa59a937ccf41609081d3f9a4973df5478979785Brian **************************************************************************/ 27aa59a937ccf41609081d3f9a4973df5478979785Brian 28aa59a937ccf41609081d3f9a4973df5478979785Brian 29d4d48c0579f7eb8d889ad325e8f1c9b4a95f6ed7Vinson Lee#include "draw/draw_context.h" 3028486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 31d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz#include "util/u_memory.h" 325b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca#include "util/u_string.h" 33aa59a937ccf41609081d3f9a4973df5478979785Brian 34aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_reg.h" 35abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz#include "i915_debug.h" 36f81b7a6285455e838adb061dcca90036c9f99522José Fonseca#include "i915_context.h" 37aa59a937ccf41609081d3f9a4973df5478979785Brian#include "i915_screen.h" 38287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "i915_surface.h" 39287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "i915_resource.h" 40bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#include "i915_winsys.h" 41c7015877beedd9831402755dbc58afddcbbd5339Jakob Bornecrantz#include "i915_public.h" 42d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 43d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 44d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 45d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Probe functions 46d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 47aa59a937ccf41609081d3f9a4973df5478979785Brian 48aa59a937ccf41609081d3f9a4973df5478979785Brian 49aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char * 501bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_vendor(struct pipe_screen *screen) 51aa59a937ccf41609081d3f9a4973df5478979785Brian{ 5221a949365d1de2f1fea6cb87c6f389e30156566fJosé Fonseca return "VMware, Inc."; 53aa59a937ccf41609081d3f9a4973df5478979785Brian} 54aa59a937ccf41609081d3f9a4973df5478979785Brian 55aa59a937ccf41609081d3f9a4973df5478979785Brianstatic const char * 561bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_get_name(struct pipe_screen *screen) 57aa59a937ccf41609081d3f9a4973df5478979785Brian{ 58aa59a937ccf41609081d3f9a4973df5478979785Brian static char buffer[128]; 59aa59a937ccf41609081d3f9a4973df5478979785Brian const char *chipset; 60aa59a937ccf41609081d3f9a4973df5478979785Brian 61835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz switch (i915_screen(screen)->iws->pci_id) { 62aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_G: 63aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "915G"; 64aa59a937ccf41609081d3f9a4973df5478979785Brian break; 65aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_GM: 66aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "915GM"; 67aa59a937ccf41609081d3f9a4973df5478979785Brian break; 68aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_G: 69aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945G"; 70aa59a937ccf41609081d3f9a4973df5478979785Brian break; 71aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GM: 72aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945GM"; 73aa59a937ccf41609081d3f9a4973df5478979785Brian break; 74aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GME: 75aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "945GME"; 76aa59a937ccf41609081d3f9a4973df5478979785Brian break; 77aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_G33_G: 78aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "G33"; 79aa59a937ccf41609081d3f9a4973df5478979785Brian break; 80aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q35_G: 81aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "Q35"; 82aa59a937ccf41609081d3f9a4973df5478979785Brian break; 83aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q33_G: 84aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "Q33"; 85aa59a937ccf41609081d3f9a4973df5478979785Brian break; 868624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_G: 878624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter chipset = "Pineview G"; 888624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter break; 898624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_M: 908624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter chipset = "Pineview M"; 918624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter break; 92aa59a937ccf41609081d3f9a4973df5478979785Brian default: 93aa59a937ccf41609081d3f9a4973df5478979785Brian chipset = "unknown"; 94aa59a937ccf41609081d3f9a4973df5478979785Brian break; 95aa59a937ccf41609081d3f9a4973df5478979785Brian } 96aa59a937ccf41609081d3f9a4973df5478979785Brian 975b8fa518476868530d748ce6d03674e9cca3d89fJosé Fonseca util_snprintf(buffer, sizeof(buffer), "i915 (chipset: %s)", chipset); 98aa59a937ccf41609081d3f9a4973df5478979785Brian return buffer; 99aa59a937ccf41609081d3f9a4973df5478979785Brian} 100aa59a937ccf41609081d3f9a4973df5478979785Brian 10117188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic int 102e1238b5cad3845c029f60d92c08e810274517d33José Fonsecai915_get_param(struct pipe_screen *screen, enum pipe_cap param) 10317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{ 10417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian switch (param) { 10517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS: 10617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 8; 10798e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: 10898e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul return 0; 10998e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul case PIPE_CAP_MAX_COMBINED_SAMPLERS: 11098e2f6c38bede8373fbf51981ccf6b513ac3695cBrian Paul return 8; 11117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_NPOT_TEXTURES: 11217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 11317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_TWO_SIDED_STENCIL: 11417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 11517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_GLSL: 11617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 11717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_ANISOTROPIC_FILTER: 11817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 11917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_POINT_SPRITE: 12017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 12117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_RENDER_TARGETS: 12217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 12317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_OCCLUSION_QUERY: 12417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 125cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich case PIPE_CAP_TIMER_QUERY: 126cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich return 0; 12717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_TEXTURE_SHADOW_MAP: 12817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 1; 12917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: 130e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_2D_LEVELS; 13117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: 132e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_3D_LEVELS; 13317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: 134e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul return I915_MAX_TEXTURE_2D_LEVELS; 1356c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT: 1366c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: 1376c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri return 1; 1386c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT: 1396c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: 1406c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri return 0; 1414bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE: 1424bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* disable for now */ 1434bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger return 0; 14417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian default: 14517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 14617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian } 14717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian} 14817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 149a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieristatic int 150a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbierii915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param) 151a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri{ 152a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri switch(shader) { 153a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_VERTEX: 154a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return draw_get_shader_param(shader, param); 155a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_FRAGMENT: 156a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri break; 157a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri default: 158a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 159a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 160a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 161a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri /* XXX: these are just shader model 2.0 values, fix this! */ 162a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri switch(param) { 163a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_INSTRUCTIONS: 164a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 96; 165a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS: 166a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 64; 167a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS: 168a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 32; 169a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS: 170a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 8; 171a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: 172a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 173a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_INPUTS: 174a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 10; 175a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONSTS: 176a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 32; 177a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: 178a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 1; 179a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_TEMPS: 180a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 12; /* XXX: 12 -> 32 ? */ 181a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_ADDRS: 182a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 183a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_MAX_PREDS: 184a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 185a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: 186a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return 0; 1875bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR: 1885bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR: 1895bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: 1905bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: 1915bf7d668acf638ae4100cc25288fc181a221bab7Marek Olšák return 1; 192a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri default: 193706380cf7da3d376b22bc32cb5decfb66665053dVinson Lee assert(0); 194706380cf7da3d376b22bc32cb5decfb66665053dVinson Lee return 0; 195a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 196a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri} 197a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 19817188e4d5a3707c134fc97976863f0d8e2f1f5abBrianstatic float 199e1238b5cad3845c029f60d92c08e810274517d33José Fonsecai915_get_paramf(struct pipe_screen *screen, enum pipe_cap param) 20017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian{ 20117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian switch (param) { 20217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_LINE_WIDTH: 20317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian /* fall-through */ 20417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_LINE_WIDTH_AA: 20517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 7.5; 20617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 20717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_POINT_WIDTH: 20817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian /* fall-through */ 20917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_POINT_WIDTH_AA: 21017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 255.0; 21117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 21217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: 21317188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 4.0; 21417188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 21517188e4d5a3707c134fc97976863f0d8e2f1f5abBrian case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: 21617188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 16.0; 21717188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 21817188e4d5a3707c134fc97976863f0d8e2f1f5abBrian default: 21917188e4d5a3707c134fc97976863f0d8e2f1f5abBrian return 0; 22017188e4d5a3707c134fc97976863f0d8e2f1f5abBrian } 22117188e4d5a3707c134fc97976863f0d8e2f1f5abBrian} 22217188e4d5a3707c134fc97976863f0d8e2f1f5abBrian 223364f8cad0f8f02fd39d9c51ea0774d349121b58dBrianstatic boolean 2241bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_is_format_supported(struct pipe_screen *screen, 225bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger enum pipe_format format, 2261bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz enum pipe_texture_target target, 227bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger unsigned sample_count, 228bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger unsigned tex_usage, 2291bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz unsigned geom_flags) 230364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{ 231364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian static const enum pipe_format tex_supported[] = { 232b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B8G8R8A8_UNORM, 233b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz PIPE_FORMAT_B8G8R8X8_UNORM, 234b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz PIPE_FORMAT_R8G8B8A8_UNORM, 235b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz#if 0 236b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz PIPE_FORMAT_R8G8B8X8_UNORM, 237b4b4ac668116d974522df2ce56e30b74ecdfef77Jakob Bornecrantz#endif 238b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B5G6R5_UNORM, 23954f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_L8_UNORM, 24054f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_A8_UNORM, 24154f94a790e4488445347abcff9a636a9c440d7f9Brian Paul PIPE_FORMAT_I8_UNORM, 242b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_L8A8_UNORM, 243b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_UYVY, 244b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_YUYV, 2454bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* XXX why not? 2464bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z16_UNORM, */ 2474bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z24X8_UNORM, 2486fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger PIPE_FORMAT_Z24_UNORM_S8_USCALED, 249364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian PIPE_FORMAT_NONE /* list terminator */ 250364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian }; 251bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger static const enum pipe_format render_supported[] = { 252b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B8G8R8A8_UNORM, 253b2b1e899f64ed8a96ea2df6ed45accd430d44363José Fonseca PIPE_FORMAT_B5G6R5_UNORM, 254bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger PIPE_FORMAT_NONE /* list terminator */ 255bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger }; 256bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger static const enum pipe_format depth_supported[] = { 2574bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger /* XXX why not? 2584bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z16_UNORM, */ 2594bc7b14224bfb9c5efe37e1505345fb90ba69d9eRoland Scheidegger PIPE_FORMAT_Z24X8_UNORM, 2606fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger PIPE_FORMAT_Z24_UNORM_S8_USCALED, 261364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian PIPE_FORMAT_NONE /* list terminator */ 262364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian }; 263364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian const enum pipe_format *list; 264364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian uint i; 265364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 266bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger if (sample_count > 1) 267bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger return FALSE; 268bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger 269bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger if(tex_usage & PIPE_BIND_DEPTH_STENCIL) 270bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger list = depth_supported; 271bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger else if (tex_usage & PIPE_BIND_RENDER_TARGET) 272bccf31bf5f2d6c9516a4c073d735b5056ff1d608Roland Scheidegger list = render_supported; 2738aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca else 2748aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca list = tex_supported; 275364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 276364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) { 277364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian if (list[i] == format) 278364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian return TRUE; 279364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian } 280364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 281364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian return FALSE; 282364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian} 283364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 284d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 285d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 286d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Fence functions 287d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 288d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 289d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 290d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic void 291d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_reference(struct pipe_screen *screen, 292d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle **ptr, 293d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence) 294d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 295d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 296d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 297d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws->fence_reference(is->iws, ptr, fence); 298d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 299d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 300d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int 301d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_signalled(struct pipe_screen *screen, 302d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence, 303d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz unsigned flags) 304d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 305d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 306d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 307d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz return is->iws->fence_signalled(is->iws, fence); 308d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 309d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 310d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstatic int 311d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzi915_fence_finish(struct pipe_screen *screen, 312d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct pipe_fence_handle *fence, 313d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz unsigned flags) 314d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz{ 315d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 316d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 317d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz return is->iws->fence_finish(is->iws, fence); 318d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz} 319d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 320d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 321d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz/* 322d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz * Generic functions 323d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz */ 324d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 325d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 326aa59a937ccf41609081d3f9a4973df5478979785Brianstatic void 3271bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantzi915_destroy_screen(struct pipe_screen *screen) 328aa59a937ccf41609081d3f9a4973df5478979785Brian{ 329d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz struct i915_screen *is = i915_screen(screen); 3309dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 331d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz if (is->iws) 332d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws->destroy(is->iws); 3339dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 334d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz FREE(is); 335aa59a937ccf41609081d3f9a4973df5478979785Brian} 336aa59a937ccf41609081d3f9a4973df5478979785Brian 337aa59a937ccf41609081d3f9a4973df5478979785Brian/** 338aa59a937ccf41609081d3f9a4973df5478979785Brian * Create a new i915_screen object 339aa59a937ccf41609081d3f9a4973df5478979785Brian */ 340aa59a937ccf41609081d3f9a4973df5478979785Brianstruct pipe_screen * 341835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantzi915_screen_create(struct i915_winsys *iws) 342aa59a937ccf41609081d3f9a4973df5478979785Brian{ 3431bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz struct i915_screen *is = CALLOC_STRUCT(i915_screen); 344aa59a937ccf41609081d3f9a4973df5478979785Brian 3451bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz if (!is) 346aa59a937ccf41609081d3f9a4973df5478979785Brian return NULL; 347aa59a937ccf41609081d3f9a4973df5478979785Brian 348835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz switch (iws->pci_id) { 349aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_G: 350aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I915_GM: 3511bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->is_i945 = FALSE; 352aa59a937ccf41609081d3f9a4973df5478979785Brian break; 353aa59a937ccf41609081d3f9a4973df5478979785Brian 354aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_G: 355aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GM: 356aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_I945_GME: 357aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_G33_G: 358aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q33_G: 359aa59a937ccf41609081d3f9a4973df5478979785Brian case PCI_CHIP_Q35_G: 3608624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_G: 3618624fe7a49f2bd42d17f79d504078ed58065f579Daniel Vetter case PCI_CHIP_PINEVIEW_M: 3621bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->is_i945 = TRUE; 363aa59a937ccf41609081d3f9a4973df5478979785Brian break; 364aa59a937ccf41609081d3f9a4973df5478979785Brian 365aa59a937ccf41609081d3f9a4973df5478979785Brian default: 366baab98a637d526871fb77ec6f313012f49c0e998José Fonseca debug_printf("%s: unknown pci id 0x%x, cannot create screen\n", 367835f5a65a11ae9ca9f4b36ceb6656c77041ec901Jakob Bornecrantz __FUNCTION__, iws->pci_id); 368520b6abdecdaba856e5ca04938e18eb83b33dfaaVinson Lee FREE(is); 369aa59a937ccf41609081d3f9a4973df5478979785Brian return NULL; 370aa59a937ccf41609081d3f9a4973df5478979785Brian } 371aa59a937ccf41609081d3f9a4973df5478979785Brian 372d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->iws = iws; 373aa59a937ccf41609081d3f9a4973df5478979785Brian 374d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.winsys = NULL; 375aa59a937ccf41609081d3f9a4973df5478979785Brian 3761bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.destroy = i915_destroy_screen; 377aa59a937ccf41609081d3f9a4973df5478979785Brian 3781bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_name = i915_get_name; 3791bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_vendor = i915_get_vendor; 3801bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_param = i915_get_param; 381a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri is->base.get_shader_param = i915_get_shader_param; 3821bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.get_paramf = i915_get_paramf; 3831bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz is->base.is_format_supported = i915_is_format_supported; 384aa59a937ccf41609081d3f9a4973df5478979785Brian 3857f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell is->base.context_create = i915_create_context; 3867f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 387d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_reference = i915_fence_reference; 388d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_signalled = i915_fence_signalled; 389d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz is->base.fence_finish = i915_fence_finish; 390d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 391287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell i915_init_screen_resource_functions(is); 392287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell i915_init_screen_surface_functions(is); 393aa59a937ccf41609081d3f9a4973df5478979785Brian 394abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz i915_debug_init(is); 395abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4fJakob Bornecrantz 3961bb3a2c648e0d6feea12bfff7f739159339f034aJakob Bornecrantz return &is->base; 397aa59a937ccf41609081d3f9a4973df5478979785Brian} 398