sp_screen.c revision 47e61426586bb9f9f40950e9c4372e4f12bb9ed6
14f36cf5858a7e53181c3578685675e15fbfcbb82Brian/************************************************************************** 24f36cf5858a7e53181c3578685675e15fbfcbb82Brian * 34f36cf5858a7e53181c3578685675e15fbfcbb82Brian * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 44f36cf5858a7e53181c3578685675e15fbfcbb82Brian * All Rights Reserved. 54f36cf5858a7e53181c3578685675e15fbfcbb82Brian * 64f36cf5858a7e53181c3578685675e15fbfcbb82Brian * Permission is hereby granted, free of charge, to any person obtaining a 74f36cf5858a7e53181c3578685675e15fbfcbb82Brian * copy of this software and associated documentation files (the 84f36cf5858a7e53181c3578685675e15fbfcbb82Brian * "Software"), to deal in the Software without restriction, including 94f36cf5858a7e53181c3578685675e15fbfcbb82Brian * without limitation the rights to use, copy, modify, merge, publish, 104f36cf5858a7e53181c3578685675e15fbfcbb82Brian * distribute, sub license, and/or sell copies of the Software, and to 114f36cf5858a7e53181c3578685675e15fbfcbb82Brian * permit persons to whom the Software is furnished to do so, subject to 124f36cf5858a7e53181c3578685675e15fbfcbb82Brian * the following conditions: 134f36cf5858a7e53181c3578685675e15fbfcbb82Brian * 144f36cf5858a7e53181c3578685675e15fbfcbb82Brian * The above copyright notice and this permission notice (including the 154f36cf5858a7e53181c3578685675e15fbfcbb82Brian * next paragraph) shall be included in all copies or substantial portions 164f36cf5858a7e53181c3578685675e15fbfcbb82Brian * of the Software. 174f36cf5858a7e53181c3578685675e15fbfcbb82Brian * 184f36cf5858a7e53181c3578685675e15fbfcbb82Brian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 194f36cf5858a7e53181c3578685675e15fbfcbb82Brian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 204f36cf5858a7e53181c3578685675e15fbfcbb82Brian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 214f36cf5858a7e53181c3578685675e15fbfcbb82Brian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 224f36cf5858a7e53181c3578685675e15fbfcbb82Brian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 234f36cf5858a7e53181c3578685675e15fbfcbb82Brian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 244f36cf5858a7e53181c3578685675e15fbfcbb82Brian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 254f36cf5858a7e53181c3578685675e15fbfcbb82Brian * 264f36cf5858a7e53181c3578685675e15fbfcbb82Brian **************************************************************************/ 274f36cf5858a7e53181c3578685675e15fbfcbb82Brian 284f36cf5858a7e53181c3578685675e15fbfcbb82Brian 294f25420bdd834e81a3e22733304efc5261c2998aBrian Paul#include "util/u_memory.h" 30f45d43a17fa1f4de50e1cf3e54d3edfdff91399dJosé Fonseca#include "util/u_format_s3tc.h" 314f36cf5858a7e53181c3578685675e15fbfcbb82Brian#include "pipe/p_defines.h" 324f36cf5858a7e53181c3578685675e15fbfcbb82Brian#include "pipe/p_screen.h" 334f36cf5858a7e53181c3578685675e15fbfcbb82Brian 3494ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell#include "state_tracker/sw_winsys.h" 3594ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell 364f36cf5858a7e53181c3578685675e15fbfcbb82Brian#include "sp_texture.h" 37c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell#include "sp_screen.h" 387f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell#include "sp_context.h" 3994ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell#include "sp_buffer.h" 404c5c442f127419d4ea780fbc60bf58f4ed17d71eJosé Fonseca#include "sp_fence.h" 413c57c01a44c294e69d902207b2ec94d28a397a51Keith Whitwell#include "sp_public.h" 424f36cf5858a7e53181c3578685675e15fbfcbb82Brian 434f36cf5858a7e53181c3578685675e15fbfcbb82Brian 444f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic const char * 454f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_get_vendor(struct pipe_screen *screen) 464f36cf5858a7e53181c3578685675e15fbfcbb82Brian{ 4721a949365d1de2f1fea6cb87c6f389e30156566fJosé Fonseca return "VMware, Inc."; 484f36cf5858a7e53181c3578685675e15fbfcbb82Brian} 494f36cf5858a7e53181c3578685675e15fbfcbb82Brian 504f36cf5858a7e53181c3578685675e15fbfcbb82Brian 514f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic const char * 524f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_get_name(struct pipe_screen *screen) 534f36cf5858a7e53181c3578685675e15fbfcbb82Brian{ 544f36cf5858a7e53181c3578685675e15fbfcbb82Brian return "softpipe"; 554f36cf5858a7e53181c3578685675e15fbfcbb82Brian} 564f36cf5858a7e53181c3578685675e15fbfcbb82Brian 574f36cf5858a7e53181c3578685675e15fbfcbb82Brian 584f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic int 594f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_get_param(struct pipe_screen *screen, int param) 604f36cf5858a7e53181c3578685675e15fbfcbb82Brian{ 614f36cf5858a7e53181c3578685675e15fbfcbb82Brian switch (param) { 624f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS: 6319aed38919d43179a9f9cb0096aba981fabc4481Brian Paul return PIPE_MAX_SAMPLERS; 647eb8b37735a32768487334664d95e98ad06f48dbBrian case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: 658a619e62bffa6f21330df747940e322909937806Michal Krol return PIPE_MAX_VERTEX_SAMPLERS; 668a619e62bffa6f21330df747940e322909937806Michal Krol case PIPE_CAP_MAX_COMBINED_SAMPLERS: 678a619e62bffa6f21330df747940e322909937806Michal Krol return PIPE_MAX_SAMPLERS + PIPE_MAX_VERTEX_SAMPLERS; 684f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_NPOT_TEXTURES: 694f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 1; 704f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_TWO_SIDED_STENCIL: 714f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 1; 724f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_GLSL: 734f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 1; 744f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_ANISOTROPIC_FILTER: 754f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 0; 764f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_POINT_SPRITE: 774f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 1; 784f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_RENDER_TARGETS: 79fdd794dcfa33482bdabe7c04ec9df655e0c69bfcBrian return PIPE_MAX_COLOR_BUFS; 804f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_OCCLUSION_QUERY: 814f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 1; 82be66a8f43172327e3cdde27281e40377cacbb121Brian Paul case PIPE_CAP_TEXTURE_MIRROR_CLAMP: 83be66a8f43172327e3cdde27281e40377cacbb121Brian Paul return 1; 84be66a8f43172327e3cdde27281e40377cacbb121Brian Paul case PIPE_CAP_TEXTURE_MIRROR_REPEAT: 85be66a8f43172327e3cdde27281e40377cacbb121Brian Paul return 1; 864f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_TEXTURE_SHADOW_MAP: 874f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 1; 884f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: 8944eec2802323b1e6cb47dfcf0aeab6b4cfd1c110Brian Paul return SP_MAX_TEXTURE_2D_LEVELS; 904f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_TEXTURE_3D_LEVELS: 9144eec2802323b1e6cb47dfcf0aeab6b4cfd1c110Brian Paul return SP_MAX_TEXTURE_3D_LEVELS; 924f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS: 9344eec2802323b1e6cb47dfcf0aeab6b4cfd1c110Brian Paul return SP_MAX_TEXTURE_2D_LEVELS; 94af7fb892d8f1eff1f0e787bf8c7d65165e3aa51eBrian Paul case PIPE_CAP_TGSI_CONT_SUPPORTED: 95af7fb892d8f1eff1f0e787bf8c7d65165e3aa51eBrian Paul return 1; 9654cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin case PIPE_CAP_BLEND_EQUATION_SEPARATE: 9754cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin return 1; 983320acb67dfa9330a80ab38e0c164f5d9c0a074aMichal Krol case PIPE_CAP_MAX_CONST_BUFFERS: 993320acb67dfa9330a80ab38e0c164f5d9c0a074aMichal Krol return PIPE_MAX_CONSTANT_BUFFERS; 1003320acb67dfa9330a80ab38e0c164f5d9c0a074aMichal Krol case PIPE_CAP_MAX_CONST_BUFFER_SIZE: 1013320acb67dfa9330a80ab38e0c164f5d9c0a074aMichal Krol return 4096 * 4 * sizeof(float); 102df4395198ce433251c8bd2d497543c7b389e5acaRoland Scheidegger case PIPE_CAP_INDEP_BLEND_ENABLE: 103df4395198ce433251c8bd2d497543c7b389e5acaRoland Scheidegger return 1; 104df4395198ce433251c8bd2d497543c7b389e5acaRoland Scheidegger case PIPE_CAP_INDEP_BLEND_FUNC: 105df4395198ce433251c8bd2d497543c7b389e5acaRoland Scheidegger return 1; 1066c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT: 1076c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT: 1086c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: 109b2299d80b4278b8b6553d4e4da4d40d37881d76eLuca Barbieri case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER: 110b2299d80b4278b8b6553d4e4da4d40d37881d76eLuca Barbieri return 1; 1114f36cf5858a7e53181c3578685675e15fbfcbb82Brian default: 1124f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 0; 1134f36cf5858a7e53181c3578685675e15fbfcbb82Brian } 1144f36cf5858a7e53181c3578685675e15fbfcbb82Brian} 1154f36cf5858a7e53181c3578685675e15fbfcbb82Brian 1164f36cf5858a7e53181c3578685675e15fbfcbb82Brian 1174f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic float 1184f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_get_paramf(struct pipe_screen *screen, int param) 1194f36cf5858a7e53181c3578685675e15fbfcbb82Brian{ 1204f36cf5858a7e53181c3578685675e15fbfcbb82Brian switch (param) { 1214f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_LINE_WIDTH: 1224f36cf5858a7e53181c3578685675e15fbfcbb82Brian /* fall-through */ 1234f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_LINE_WIDTH_AA: 1244f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 255.0; /* arbitrary */ 1254f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_POINT_WIDTH: 1264f36cf5858a7e53181c3578685675e15fbfcbb82Brian /* fall-through */ 1274f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_POINT_WIDTH_AA: 1284f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 255.0; /* arbitrary */ 1294f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_TEXTURE_ANISOTROPY: 130f9c0ce0e073cd60f632de3a0588a111b92a602ddBrian Paul return 16.0; /* not actually signficant at this time */ 1314f36cf5858a7e53181c3578685675e15fbfcbb82Brian case PIPE_CAP_MAX_TEXTURE_LOD_BIAS: 1324f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 16.0; /* arbitrary */ 1334f36cf5858a7e53181c3578685675e15fbfcbb82Brian default: 1344f36cf5858a7e53181c3578685675e15fbfcbb82Brian return 0; 1354f36cf5858a7e53181c3578685675e15fbfcbb82Brian } 1364f36cf5858a7e53181c3578685675e15fbfcbb82Brian} 1374f36cf5858a7e53181c3578685675e15fbfcbb82Brian 1384f36cf5858a7e53181c3578685675e15fbfcbb82Brian 139364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian/** 140364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian * Query format support for creating a texture, drawing surface, etc. 141364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian * \param format the format to test 142364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian * \param type one of PIPE_TEXTURE, PIPE_SURFACE 143364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian */ 144364f8cad0f8f02fd39d9c51ea0774d349121b58dBrianstatic boolean 145364f8cad0f8f02fd39d9c51ea0774d349121b58dBriansoftpipe_is_format_supported( struct pipe_screen *screen, 1468aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca enum pipe_format format, 1478aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca enum pipe_texture_target target, 1488aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca unsigned tex_usage, 1498aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca unsigned geom_flags ) 150364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{ 15194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell struct sw_winsys *winsys = softpipe_screen(screen)->winsys; 15294ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell 15330320f0afb3ae4409adab662d65475cf9665bc19Brian Paul assert(target == PIPE_TEXTURE_1D || 15430320f0afb3ae4409adab662d65475cf9665bc19Brian Paul target == PIPE_TEXTURE_2D || 15530320f0afb3ae4409adab662d65475cf9665bc19Brian Paul target == PIPE_TEXTURE_3D || 15630320f0afb3ae4409adab662d65475cf9665bc19Brian Paul target == PIPE_TEXTURE_CUBE); 15730320f0afb3ae4409adab662d65475cf9665bc19Brian Paul 15847e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca switch(format) { 15947e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca case PIPE_FORMAT_YUYV: 16047e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca case PIPE_FORMAT_UYVY: 161f45d43a17fa1f4de50e1cf3e54d3edfdff91399dJosé Fonseca return FALSE; 162f45d43a17fa1f4de50e1cf3e54d3edfdff91399dJosé Fonseca 16347e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca case PIPE_FORMAT_DXT1_RGB: 16447e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca case PIPE_FORMAT_DXT1_RGBA: 16547e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca case PIPE_FORMAT_DXT3_RGBA: 16647e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca case PIPE_FORMAT_DXT5_RGBA: 16747e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca return util_format_s3tc_enabled; 16847e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca 16947e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca case PIPE_FORMAT_Z32_FLOAT: 17047e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca case PIPE_FORMAT_NONE: 17147e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca return FALSE; 17247e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca 17347e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca default: 17447e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca break; 17547e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca } 17647e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca 1778b63f9b497c22cb59678588d921699189f8b712fJakob Bornecrantz if(tex_usage & (PIPE_TEXTURE_USAGE_DISPLAY_TARGET | 1788b63f9b497c22cb59678588d921699189f8b712fJakob Bornecrantz PIPE_TEXTURE_USAGE_SCANOUT | 1798b63f9b497c22cb59678588d921699189f8b712fJakob Bornecrantz PIPE_TEXTURE_USAGE_SHARED)) { 1808b63f9b497c22cb59678588d921699189f8b712fJakob Bornecrantz if(!winsys->is_displaytarget_format_supported(winsys, tex_usage, format)) 18194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell return FALSE; 18294ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell } 18394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell 18447e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca /* XXX: this is often a lie. Pull in logic from llvmpipe to fix. 18547e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca */ 18694ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell return TRUE; 187364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian} 188364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 189364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian 1904f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic void 1914f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_destroy_screen( struct pipe_screen *screen ) 1924f36cf5858a7e53181c3578685675e15fbfcbb82Brian{ 19394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell struct softpipe_screen *sp_screen = softpipe_screen(screen); 19494ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell struct sw_winsys *winsys = sp_screen->winsys; 1959dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 1969dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca if(winsys->destroy) 1979dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca winsys->destroy(winsys); 1989dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca 1994f36cf5858a7e53181c3578685675e15fbfcbb82Brian FREE(screen); 2004f36cf5858a7e53181c3578685675e15fbfcbb82Brian} 2014f36cf5858a7e53181c3578685675e15fbfcbb82Brian 2024f36cf5858a7e53181c3578685675e15fbfcbb82Brian 20394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell/* This is often overriden by the co-state tracker. 20494ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell */ 20594ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwellstatic void 20694ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwellsoftpipe_flush_frontbuffer(struct pipe_screen *_screen, 20794ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell struct pipe_surface *surface, 20894ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell void *context_private) 20994ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell{ 21094ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell struct softpipe_screen *screen = softpipe_screen(_screen); 21194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell struct sw_winsys *winsys = screen->winsys; 21294ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell struct softpipe_texture *texture = softpipe_texture(surface->texture); 21394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell 21494ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell assert(texture->dt); 21594ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell if (texture->dt) 21694ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell winsys->displaytarget_display(winsys, texture->dt, context_private); 21794ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell} 218c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell 2194f36cf5858a7e53181c3578685675e15fbfcbb82Brian/** 2204f36cf5858a7e53181c3578685675e15fbfcbb82Brian * Create a new pipe_screen object 2214f36cf5858a7e53181c3578685675e15fbfcbb82Brian * Note: we're not presently subclassing pipe_screen (no softpipe_screen). 2224f36cf5858a7e53181c3578685675e15fbfcbb82Brian */ 2234f36cf5858a7e53181c3578685675e15fbfcbb82Brianstruct pipe_screen * 22494ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwellsoftpipe_create_screen(struct sw_winsys *winsys) 2254f36cf5858a7e53181c3578685675e15fbfcbb82Brian{ 226c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell struct softpipe_screen *screen = CALLOC_STRUCT(softpipe_screen); 2274f36cf5858a7e53181c3578685675e15fbfcbb82Brian 2284f36cf5858a7e53181c3578685675e15fbfcbb82Brian if (!screen) 2294f36cf5858a7e53181c3578685675e15fbfcbb82Brian return NULL; 2304f36cf5858a7e53181c3578685675e15fbfcbb82Brian 23194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell screen->winsys = winsys; 2324f36cf5858a7e53181c3578685675e15fbfcbb82Brian 23394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell screen->base.winsys = NULL; 234c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell screen->base.destroy = softpipe_destroy_screen; 2354f36cf5858a7e53181c3578685675e15fbfcbb82Brian 236c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell screen->base.get_name = softpipe_get_name; 237c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell screen->base.get_vendor = softpipe_get_vendor; 238c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell screen->base.get_param = softpipe_get_param; 239c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell screen->base.get_paramf = softpipe_get_paramf; 240c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell screen->base.is_format_supported = softpipe_is_format_supported; 2417f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell screen->base.context_create = softpipe_create_context; 24294ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell screen->base.flush_frontbuffer = softpipe_flush_frontbuffer; 2434f36cf5858a7e53181c3578685675e15fbfcbb82Brian 24447e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca util_format_s3tc_init(); 24547e61426586bb9f9f40950e9c4372e4f12bb9ed6José Fonseca 246c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell softpipe_init_screen_texture_funcs(&screen->base); 24794ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell softpipe_init_screen_buffer_funcs(&screen->base); 2484c5c442f127419d4ea780fbc60bf58f4ed17d71eJosé Fonseca softpipe_init_screen_fence_funcs(&screen->base); 2494f36cf5858a7e53181c3578685675e15fbfcbb82Brian 250c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell return &screen->base; 2514f36cf5858a7e53181c3578685675e15fbfcbb82Brian} 252