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