1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "draw/draw_context.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_format.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_format_s3tc.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_inlines.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_string.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_reg.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_debug.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_context.h" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_screen.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_resource.h" 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_winsys.h" 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_public.h" 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Probe functions 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char * 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_get_vendor(struct pipe_screen *screen) 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return "VMware, Inc."; 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char * 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_get_name(struct pipe_screen *screen) 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static char buffer[128]; 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *chipset; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (i915_screen(screen)->iws->pci_id) { 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I915_G: 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "915G"; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I915_GM: 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "915GM"; 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I945_G: 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "945G"; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I945_GM: 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "945GM"; 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I945_GME: 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "945GME"; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_G33_G: 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "G33"; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_Q35_G: 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "Q35"; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_Q33_G: 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "Q33"; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_PINEVIEW_G: 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "Pineview G"; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_PINEVIEW_M: 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "Pineview M"; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org chipset = "unknown"; 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org util_snprintf(buffer, sizeof(buffer), "i915 (chipset: %s)", chipset); 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return buffer; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap cap) 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch(shader) { 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_VERTEX: 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (cap) { 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (debug_get_bool_option("DRAW_USE_LLVM", TRUE)) 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return PIPE_MAX_SAMPLERS; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return draw_get_shader_param(shader, cap); 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_FRAGMENT: 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX: some of these are just shader model 2.0 values, fix this! */ 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch(cap) { 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_INSTRUCTIONS: 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return I915_MAX_ALU_INSN + I915_MAX_TEX_INSN; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS: 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return I915_MAX_ALU_INSN; 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS: 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return I915_MAX_TEX_INSN; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS: 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 8; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_INPUTS: 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 10; 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_CONSTS: 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 32; 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 1; 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_TEMPS: 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 12; /* XXX: 12 -> 32 ? */ 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_ADDRS: 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_PREDS: 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED: 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR: 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR: 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 1; 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_SUBROUTINES: 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_INTEGERS: 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return I915_TEX_UNITS; 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap); 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_get_param(struct pipe_screen *screen, enum pipe_cap cap) 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_screen *is = i915_screen(screen); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (cap) { 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Supported features (boolean caps). */ 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_ANISOTROPIC_FILTER: 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE: 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_NPOT_TEXTURES: 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_POINT_SPRITE: 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_PRIMITIVE_RESTART: /* draw module */ 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TEXTURE_SHADOW_MAP: 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TWO_SIDED_STENCIL: 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR: 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_BLEND_EQUATION_SEPARATE: 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TGSI_INSTANCEID: 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_VERTEX_COLOR_CLAMPED: 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_USER_VERTEX_BUFFERS: 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_USER_INDEX_BUFFERS: 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_USER_CONSTANT_BUFFERS: 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 1; 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Unsupported features (boolean caps). */ 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS: 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_DEPTH_CLIP_DISABLE: 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_INDEP_BLEND_ENABLE: 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_INDEP_BLEND_FUNC: 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_SHADER_STENCIL_EXPORT: 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TEXTURE_MIRROR_CLAMP: 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TEXTURE_SWIZZLE: 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TIMER_QUERY: 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_SM3: 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_SEAMLESS_CUBE_MAP: 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE: 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_SCALED_RESOLVE: 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_FRAGMENT_COLOR_CLAMPED: 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MIXED_COLORBUFFER_FORMATS: 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_CONDITIONAL_RENDER: 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TEXTURE_BARRIER: 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TGSI_CAN_COMPACT_VARYINGS: 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS: 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_VERTEX_COLOR_UNCLAMPED: 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_START_INSTANCE: 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_QUERY_TIMESTAMP: 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 16; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Features we can lie about (boolean caps). */ 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_OCCLUSION_QUERY: 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is->debug.lie ? 1 : 0; 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Texturing. */ 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_COMBINED_SAMPLERS: 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return i915_get_shader_param(screen, 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_SHADER_VERTEX, 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS) + 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_get_shader_param(screen, 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_SHADER_FRAGMENT, 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS); 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return I915_MAX_TEXTURE_2D_LEVELS; 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return I915_MAX_TEXTURE_3D_LEVELS; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return I915_MAX_TEXTURE_2D_LEVELS; 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MIN_TEXEL_OFFSET: 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_TEXEL_OFFSET: 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS: 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS: 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS: 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Render targets. */ 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_MAX_RENDER_TARGETS: 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 1; 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Fragment coordinate conventions. */ 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT: 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 1; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT: 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap); 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic float 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_get_paramf(struct pipe_screen *screen, enum pipe_capf cap) 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch(cap) { 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAPF_MAX_LINE_WIDTH: 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* fall-through */ 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAPF_MAX_LINE_WIDTH_AA: 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 7.5; 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAPF_MAX_POINT_WIDTH: 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* fall-through */ 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAPF_MAX_POINT_WIDTH_AA: 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 255.0; 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY: 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 4.0; 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS: 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 16.0; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap); 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgboolean 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_is_format_supported(struct pipe_screen *screen, 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_format format, 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_texture_target target, 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned sample_count, 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned tex_usage) 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static const enum pipe_format tex_supported[] = { 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B8G8R8A8_UNORM, 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B8G8R8A8_SRGB, 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B8G8R8X8_UNORM, 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_R8G8B8A8_UNORM, 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_R8G8B8X8_UNORM, 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B5G6R5_UNORM, 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B10G10R10A2_UNORM, 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_L8_UNORM, 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_A8_UNORM, 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_I8_UNORM, 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_L8A8_UNORM, 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_UYVY, 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_YUYV, 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX why not? 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_Z16_UNORM, */ 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_DXT1_RGB, 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_DXT1_RGBA, 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_DXT3_RGBA, 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_DXT5_RGBA, 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_Z24X8_UNORM, 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_Z24_UNORM_S8_UINT, 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_NONE /* list terminator */ 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static const enum pipe_format render_supported[] = { 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B8G8R8A8_UNORM, 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B8G8R8X8_UNORM, 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_R8G8B8A8_UNORM, 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_R8G8B8X8_UNORM, 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B5G6R5_UNORM, 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_B10G10R10A2_UNORM, 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_L8_UNORM, 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_A8_UNORM, 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_I8_UNORM, 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_NONE /* list terminator */ 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static const enum pipe_format depth_supported[] = { 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX why not? 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_Z16_UNORM, */ 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_Z24X8_UNORM, 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_Z24_UNORM_S8_UINT, 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_NONE /* list terminator */ 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const enum pipe_format *list; 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint i; 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!util_format_is_supported(format, tex_usage)) 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (sample_count > 1) 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if(tex_usage & PIPE_BIND_DEPTH_STENCIL) 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org list = depth_supported; 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (tex_usage & PIPE_BIND_RENDER_TARGET) 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org list = render_supported; 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (tex_usage & PIPE_BIND_SAMPLER_VIEW) 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org list = tex_supported; 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; /* PIPE_BIND_{VERTEX,INDEX}_BUFFER */ 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) { 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (list[i] == format) 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fence functions 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_fence_reference(struct pipe_screen *screen, 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle **ptr, 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle *fence) 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_screen *is = i915_screen(screen); 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->iws->fence_reference(is->iws, ptr, fence); 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_fence_signalled(struct pipe_screen *screen, 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle *fence) 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_screen *is = i915_screen(screen); 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is->iws->fence_signalled(is->iws, fence) == 1; 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_fence_finish(struct pipe_screen *screen, 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle *fence, 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint64_t timeout) 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_screen *is = i915_screen(screen); 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return is->iws->fence_finish(is->iws, fence) == 1; 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Generic functions 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_flush_frontbuffer(struct pipe_screen *screen, 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *resource, 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level, unsigned layer, 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *winsys_drawable_handle) 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX: Dummy right now. */ 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)screen; 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)resource; 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)level; 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)layer; 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void)winsys_drawable_handle; 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_destroy_screen(struct pipe_screen *screen) 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_screen *is = i915_screen(screen); 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (is->iws) 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->iws->destroy(is->iws); 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(is); 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create a new i915_screen object 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_screen * 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_screen_create(struct i915_winsys *iws) 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_screen *is = CALLOC_STRUCT(i915_screen); 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!is) 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (iws->pci_id) { 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I915_G: 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I915_GM: 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->is_i945 = FALSE; 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I945_G: 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I945_GM: 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_I945_GME: 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_G33_G: 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_Q33_G: 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_Q35_G: 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_PINEVIEW_G: 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PCI_CHIP_PINEVIEW_M: 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->is_i945 = TRUE; 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org debug_printf("%s: unknown pci id 0x%x, cannot create screen\n", 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __FUNCTION__, iws->pci_id); 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(is); 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->iws = iws; 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.destroy = i915_destroy_screen; 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.flush_frontbuffer = i915_flush_frontbuffer; 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.get_name = i915_get_name; 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.get_vendor = i915_get_vendor; 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.get_param = i915_get_param; 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.get_shader_param = i915_get_shader_param; 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.get_paramf = i915_get_paramf; 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.is_format_supported = i915_is_format_supported; 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.context_create = i915_create_context; 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.fence_reference = i915_fence_reference; 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.fence_signalled = i915_fence_signalled; 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org is->base.fence_finish = i915_fence_finish; 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_init_screen_resource_functions(is); 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_debug_init(is); 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org util_format_s3tc_init(); 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &is->base; 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 488