sp_screen.c revision 4c5c442f127419d4ea780fbc60bf58f4ed17d71e
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"
304f36cf5858a7e53181c3578685675e15fbfcbb82Brian#include "pipe/p_defines.h"
314f36cf5858a7e53181c3578685675e15fbfcbb82Brian#include "pipe/p_screen.h"
324f36cf5858a7e53181c3578685675e15fbfcbb82Brian
3394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell#include "state_tracker/sw_winsys.h"
3494ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell
354f36cf5858a7e53181c3578685675e15fbfcbb82Brian#include "sp_texture.h"
36c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell#include "sp_screen.h"
377f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell#include "sp_context.h"
3894ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell#include "sp_buffer.h"
394c5c442f127419d4ea780fbc60bf58f4ed17d71eJosé Fonseca#include "sp_fence.h"
403c57c01a44c294e69d902207b2ec94d28a397a51Keith Whitwell#include "sp_public.h"
414f36cf5858a7e53181c3578685675e15fbfcbb82Brian
424f36cf5858a7e53181c3578685675e15fbfcbb82Brian
434f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic const char *
444f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_get_vendor(struct pipe_screen *screen)
454f36cf5858a7e53181c3578685675e15fbfcbb82Brian{
4621a949365d1de2f1fea6cb87c6f389e30156566fJosé Fonseca   return "VMware, Inc.";
474f36cf5858a7e53181c3578685675e15fbfcbb82Brian}
484f36cf5858a7e53181c3578685675e15fbfcbb82Brian
494f36cf5858a7e53181c3578685675e15fbfcbb82Brian
504f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic const char *
514f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_get_name(struct pipe_screen *screen)
524f36cf5858a7e53181c3578685675e15fbfcbb82Brian{
534f36cf5858a7e53181c3578685675e15fbfcbb82Brian   return "softpipe";
544f36cf5858a7e53181c3578685675e15fbfcbb82Brian}
554f36cf5858a7e53181c3578685675e15fbfcbb82Brian
564f36cf5858a7e53181c3578685675e15fbfcbb82Brian
574f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic int
584f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_get_param(struct pipe_screen *screen, int param)
594f36cf5858a7e53181c3578685675e15fbfcbb82Brian{
604f36cf5858a7e53181c3578685675e15fbfcbb82Brian   switch (param) {
614f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
6219aed38919d43179a9f9cb0096aba981fabc4481Brian Paul      return PIPE_MAX_SAMPLERS;
637eb8b37735a32768487334664d95e98ad06f48dbBrian   case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS:
648a619e62bffa6f21330df747940e322909937806Michal Krol      return PIPE_MAX_VERTEX_SAMPLERS;
658a619e62bffa6f21330df747940e322909937806Michal Krol   case PIPE_CAP_MAX_COMBINED_SAMPLERS:
668a619e62bffa6f21330df747940e322909937806Michal Krol      return PIPE_MAX_SAMPLERS + PIPE_MAX_VERTEX_SAMPLERS;
674f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_NPOT_TEXTURES:
684f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 1;
694f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_TWO_SIDED_STENCIL:
704f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 1;
714f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_GLSL:
724f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 1;
734f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_ANISOTROPIC_FILTER:
744f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 0;
754f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_POINT_SPRITE:
764f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 1;
774f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_RENDER_TARGETS:
78fdd794dcfa33482bdabe7c04ec9df655e0c69bfcBrian      return PIPE_MAX_COLOR_BUFS;
794f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_OCCLUSION_QUERY:
804f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 1;
81be66a8f43172327e3cdde27281e40377cacbb121Brian Paul   case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
82be66a8f43172327e3cdde27281e40377cacbb121Brian Paul      return 1;
83be66a8f43172327e3cdde27281e40377cacbb121Brian Paul   case PIPE_CAP_TEXTURE_MIRROR_REPEAT:
84be66a8f43172327e3cdde27281e40377cacbb121Brian Paul      return 1;
854f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_TEXTURE_SHADOW_MAP:
864f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 1;
874f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
8844eec2802323b1e6cb47dfcf0aeab6b4cfd1c110Brian Paul      return SP_MAX_TEXTURE_2D_LEVELS;
894f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
9044eec2802323b1e6cb47dfcf0aeab6b4cfd1c110Brian Paul      return SP_MAX_TEXTURE_3D_LEVELS;
914f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
9244eec2802323b1e6cb47dfcf0aeab6b4cfd1c110Brian Paul      return SP_MAX_TEXTURE_2D_LEVELS;
93af7fb892d8f1eff1f0e787bf8c7d65165e3aa51eBrian Paul   case PIPE_CAP_TGSI_CONT_SUPPORTED:
94af7fb892d8f1eff1f0e787bf8c7d65165e3aa51eBrian Paul      return 1;
9554cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin   case PIPE_CAP_BLEND_EQUATION_SEPARATE:
9654cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin      return 1;
973320acb67dfa9330a80ab38e0c164f5d9c0a074aMichal Krol   case PIPE_CAP_MAX_CONST_BUFFERS:
983320acb67dfa9330a80ab38e0c164f5d9c0a074aMichal Krol      return PIPE_MAX_CONSTANT_BUFFERS;
993320acb67dfa9330a80ab38e0c164f5d9c0a074aMichal Krol   case PIPE_CAP_MAX_CONST_BUFFER_SIZE:
1003320acb67dfa9330a80ab38e0c164f5d9c0a074aMichal Krol      return 4096 * 4 * sizeof(float);
101df4395198ce433251c8bd2d497543c7b389e5acaRoland Scheidegger   case PIPE_CAP_INDEP_BLEND_ENABLE:
102df4395198ce433251c8bd2d497543c7b389e5acaRoland Scheidegger      return 1;
103df4395198ce433251c8bd2d497543c7b389e5acaRoland Scheidegger   case PIPE_CAP_INDEP_BLEND_FUNC:
104df4395198ce433251c8bd2d497543c7b389e5acaRoland Scheidegger      return 1;
1056c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
1066c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
1076c403750d6515f8b2f333d995c87676016e1883dLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
108b2299d80b4278b8b6553d4e4da4d40d37881d76eLuca Barbieri   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
109b2299d80b4278b8b6553d4e4da4d40d37881d76eLuca Barbieri      return 1;
1104f36cf5858a7e53181c3578685675e15fbfcbb82Brian   default:
1114f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 0;
1124f36cf5858a7e53181c3578685675e15fbfcbb82Brian   }
1134f36cf5858a7e53181c3578685675e15fbfcbb82Brian}
1144f36cf5858a7e53181c3578685675e15fbfcbb82Brian
1154f36cf5858a7e53181c3578685675e15fbfcbb82Brian
1164f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic float
1174f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_get_paramf(struct pipe_screen *screen, int param)
1184f36cf5858a7e53181c3578685675e15fbfcbb82Brian{
1194f36cf5858a7e53181c3578685675e15fbfcbb82Brian   switch (param) {
1204f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_LINE_WIDTH:
1214f36cf5858a7e53181c3578685675e15fbfcbb82Brian      /* fall-through */
1224f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_LINE_WIDTH_AA:
1234f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 255.0; /* arbitrary */
1244f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_POINT_WIDTH:
1254f36cf5858a7e53181c3578685675e15fbfcbb82Brian      /* fall-through */
1264f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_POINT_WIDTH_AA:
1274f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 255.0; /* arbitrary */
1284f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
129f9c0ce0e073cd60f632de3a0588a111b92a602ddBrian Paul      return 16.0; /* not actually signficant at this time */
1304f36cf5858a7e53181c3578685675e15fbfcbb82Brian   case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
1314f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 16.0; /* arbitrary */
1324f36cf5858a7e53181c3578685675e15fbfcbb82Brian   default:
1334f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return 0;
1344f36cf5858a7e53181c3578685675e15fbfcbb82Brian   }
1354f36cf5858a7e53181c3578685675e15fbfcbb82Brian}
1364f36cf5858a7e53181c3578685675e15fbfcbb82Brian
1374f36cf5858a7e53181c3578685675e15fbfcbb82Brian
138364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian/**
139364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian * Query format support for creating a texture, drawing surface, etc.
140364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian * \param format  the format to test
141364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian * \param type  one of PIPE_TEXTURE, PIPE_SURFACE
142364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian */
143364f8cad0f8f02fd39d9c51ea0774d349121b58dBrianstatic boolean
144364f8cad0f8f02fd39d9c51ea0774d349121b58dBriansoftpipe_is_format_supported( struct pipe_screen *screen,
1458aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca                              enum pipe_format format,
1468aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca                              enum pipe_texture_target target,
1478aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca                              unsigned tex_usage,
1488aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca                              unsigned geom_flags )
149364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian{
15094ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   struct sw_winsys *winsys = softpipe_screen(screen)->winsys;
15194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell
15230320f0afb3ae4409adab662d65475cf9665bc19Brian Paul   assert(target == PIPE_TEXTURE_1D ||
15330320f0afb3ae4409adab662d65475cf9665bc19Brian Paul          target == PIPE_TEXTURE_2D ||
15430320f0afb3ae4409adab662d65475cf9665bc19Brian Paul          target == PIPE_TEXTURE_3D ||
15530320f0afb3ae4409adab662d65475cf9665bc19Brian Paul          target == PIPE_TEXTURE_CUBE);
15630320f0afb3ae4409adab662d65475cf9665bc19Brian Paul
1578aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca   switch(format) {
158a0fbc01ceaef08b33f97936d8840a6f48ec1654dMichal Krol   case PIPE_FORMAT_L16_UNORM:
159b7b07b0029c4c17603c97467dda0a487417c2477José Fonseca   case PIPE_FORMAT_YUYV:
160b7b07b0029c4c17603c97467dda0a487417c2477José Fonseca   case PIPE_FORMAT_UYVY:
1618aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca   case PIPE_FORMAT_DXT1_RGB:
1628aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca   case PIPE_FORMAT_DXT1_RGBA:
1638aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca   case PIPE_FORMAT_DXT3_RGBA:
1648aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca   case PIPE_FORMAT_DXT5_RGBA:
165ec48396e0fefb86a549b02b760f669f74c15d715Michal Krol   case PIPE_FORMAT_Z32_FLOAT:
1660f884ed993500171ad91fc9f2552574face9ee17Michal Krol   case PIPE_FORMAT_R8G8_SNORM:
167b7b07b0029c4c17603c97467dda0a487417c2477José Fonseca   case PIPE_FORMAT_R5SG5SB6U_NORM:
168b7b07b0029c4c17603c97467dda0a487417c2477José Fonseca   case PIPE_FORMAT_R8SG8SB8UX8U_NORM:
169971ab386c0c8b7fd261a41e9a38fc4f83f9ba3f6José Fonseca   case PIPE_FORMAT_R8G8B8A8_SNORM:
1706bb415f862fec94b82915f806beb3a7427bd4bb8Keith Whitwell   case PIPE_FORMAT_NONE:
171364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian      return FALSE;
1728aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca   default:
17394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell      break;
174364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian   }
17594ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell
17694ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   if(tex_usage & PIPE_TEXTURE_USAGE_DISPLAY_TARGET) {
17794ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell      if(!winsys->is_displaytarget_format_supported(winsys, format))
17894ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell         return FALSE;
17994ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   }
18094ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell
18194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   /* XXX: this is often a lie.  Pull in logic from llvmpipe to fix.
18294ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell    */
18394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   return TRUE;
184364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian}
185364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
186364f8cad0f8f02fd39d9c51ea0774d349121b58dBrian
1874f36cf5858a7e53181c3578685675e15fbfcbb82Brianstatic void
1884f36cf5858a7e53181c3578685675e15fbfcbb82Briansoftpipe_destroy_screen( struct pipe_screen *screen )
1894f36cf5858a7e53181c3578685675e15fbfcbb82Brian{
19094ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   struct softpipe_screen *sp_screen = softpipe_screen(screen);
19194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   struct sw_winsys *winsys = sp_screen->winsys;
1929dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca
1939dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca   if(winsys->destroy)
1949dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca      winsys->destroy(winsys);
1959dcb956a0618931c97693f7c74493cf296cfe86cJosé Fonseca
1964f36cf5858a7e53181c3578685675e15fbfcbb82Brian   FREE(screen);
1974f36cf5858a7e53181c3578685675e15fbfcbb82Brian}
1984f36cf5858a7e53181c3578685675e15fbfcbb82Brian
1994f36cf5858a7e53181c3578685675e15fbfcbb82Brian
20094ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell/* This is often overriden by the co-state tracker.
20194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell */
20294ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwellstatic void
20394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwellsoftpipe_flush_frontbuffer(struct pipe_screen *_screen,
20494ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell                           struct pipe_surface *surface,
20594ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell                           void *context_private)
20694ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell{
20794ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   struct softpipe_screen *screen = softpipe_screen(_screen);
20894ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   struct sw_winsys *winsys = screen->winsys;
20994ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   struct softpipe_texture *texture = softpipe_texture(surface->texture);
21094ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell
21194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   assert(texture->dt);
21294ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   if (texture->dt)
21394ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell      winsys->displaytarget_display(winsys, texture->dt, context_private);
21494ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell}
215c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell
2164f36cf5858a7e53181c3578685675e15fbfcbb82Brian/**
2174f36cf5858a7e53181c3578685675e15fbfcbb82Brian * Create a new pipe_screen object
2184f36cf5858a7e53181c3578685675e15fbfcbb82Brian * Note: we're not presently subclassing pipe_screen (no softpipe_screen).
2194f36cf5858a7e53181c3578685675e15fbfcbb82Brian */
2204f36cf5858a7e53181c3578685675e15fbfcbb82Brianstruct pipe_screen *
22194ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwellsoftpipe_create_screen(struct sw_winsys *winsys)
2224f36cf5858a7e53181c3578685675e15fbfcbb82Brian{
223c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   struct softpipe_screen *screen = CALLOC_STRUCT(softpipe_screen);
2244f36cf5858a7e53181c3578685675e15fbfcbb82Brian
2254f36cf5858a7e53181c3578685675e15fbfcbb82Brian   if (!screen)
2264f36cf5858a7e53181c3578685675e15fbfcbb82Brian      return NULL;
2274f36cf5858a7e53181c3578685675e15fbfcbb82Brian
22894ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   screen->winsys = winsys;
2294f36cf5858a7e53181c3578685675e15fbfcbb82Brian
23094ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   screen->base.winsys = NULL;
231c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   screen->base.destroy = softpipe_destroy_screen;
2324f36cf5858a7e53181c3578685675e15fbfcbb82Brian
233c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   screen->base.get_name = softpipe_get_name;
234c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   screen->base.get_vendor = softpipe_get_vendor;
235c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   screen->base.get_param = softpipe_get_param;
236c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   screen->base.get_paramf = softpipe_get_paramf;
237c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   screen->base.is_format_supported = softpipe_is_format_supported;
2387f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell   screen->base.context_create = softpipe_create_context;
23994ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   screen->base.flush_frontbuffer = softpipe_flush_frontbuffer;
2404f36cf5858a7e53181c3578685675e15fbfcbb82Brian
241c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   softpipe_init_screen_texture_funcs(&screen->base);
24294ce4eb3c27706d992226d847d123c46b14b1c4fKeith Whitwell   softpipe_init_screen_buffer_funcs(&screen->base);
2434c5c442f127419d4ea780fbc60bf58f4ed17d71eJosé Fonseca   softpipe_init_screen_fence_funcs(&screen->base);
2444f36cf5858a7e53181c3578685675e15fbfcbb82Brian
245c9ed86a96483063f3d6789ed16645a3dca77d726Keith Whitwell   return &screen->base;
2464f36cf5858a7e53181c3578685675e15fbfcbb82Brian}
247