Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2007-2009 VMware, Inc.
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  21.  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  22.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  23.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  24.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27.  
  28. /**
  29.  * @file
  30.  * Software rasterizer winsys.
  31.  */
  32.  
  33.  
  34. #ifndef SW_WINSYS_H
  35. #define SW_WINSYS_H
  36.  
  37.  
  38. #include "pipe/p_compiler.h" /* for boolean */
  39. #include "pipe/p_format.h"
  40.  
  41.  
  42. #ifdef __cplusplus
  43. extern "C" {
  44. #endif
  45.  
  46.  
  47. struct winsys_handle;
  48. struct pipe_screen;
  49. struct pipe_context;
  50. struct pipe_resource;
  51.  
  52.  
  53. /**
  54.  * Opaque pointer.
  55.  */
  56. struct sw_displaytarget;
  57.  
  58.  
  59. /**
  60.  * This is the interface that sw expects any window system
  61.  * hosting it to implement.
  62.  *
  63.  * sw is for the most part a self sufficient driver. The only thing it
  64.  * does not know is how to display a surface.
  65.  */
  66. struct sw_winsys
  67. {
  68.    void
  69.    (*destroy)( struct sw_winsys *ws );
  70.  
  71.    boolean
  72.    (*is_displaytarget_format_supported)( struct sw_winsys *ws,
  73.                                          unsigned tex_usage,
  74.                                          enum pipe_format format );
  75.    
  76.    /**
  77.     * Allocate storage for a render target.
  78.     *
  79.     * Often surfaces which are meant to be blitted to the front screen (i.e.,
  80.     * display targets) must be allocated with special characteristics, memory
  81.     * pools, or obtained directly from the windowing system.
  82.     *  
  83.     * This callback is invoked by the pipe_screen when creating a texture marked
  84.     * with the PIPE_BIND_DISPLAY_TARGET flag to get the underlying
  85.     * storage.
  86.     */
  87.    struct sw_displaytarget *
  88.    (*displaytarget_create)( struct sw_winsys *ws,
  89.                             unsigned tex_usage,
  90.                             enum pipe_format format,
  91.                             unsigned width, unsigned height,
  92.                             unsigned alignment,
  93.                             unsigned *stride );
  94.  
  95.    /**
  96.     * Used to implement texture_from_handle.
  97.     */
  98.    struct sw_displaytarget *
  99.    (*displaytarget_from_handle)( struct sw_winsys *ws,
  100.                                  const struct pipe_resource *templat,
  101.                                  struct winsys_handle *whandle,
  102.                                  unsigned *stride );
  103.  
  104.    /**
  105.     * Used to implement texture_get_handle.
  106.     */
  107.    boolean
  108.    (*displaytarget_get_handle)( struct sw_winsys *ws,
  109.                                 struct sw_displaytarget *dt,
  110.                                 struct winsys_handle *whandle );
  111.  
  112.    /**
  113.     * \param flags  bitmask of PIPE_TRANSFER_x flags
  114.     */
  115.    void *
  116.    (*displaytarget_map)( struct sw_winsys *ws,
  117.                          struct sw_displaytarget *dt,
  118.                          unsigned flags );
  119.  
  120.    void
  121.    (*displaytarget_unmap)( struct sw_winsys *ws,
  122.                            struct sw_displaytarget *dt );
  123.  
  124.    /**
  125.     * @sa pipe_screen:flush_frontbuffer.
  126.     *
  127.     * This call will likely become asynchronous eventually.
  128.     */
  129.    void
  130.    (*displaytarget_display)( struct sw_winsys *ws,
  131.                              struct sw_displaytarget *dt,
  132.                              void *context_private );
  133.  
  134.    void
  135.    (*displaytarget_destroy)( struct sw_winsys *ws,
  136.                              struct sw_displaytarget *dt );
  137. };
  138.  
  139.  
  140.  
  141. #ifdef __cplusplus
  142. }
  143. #endif
  144.  
  145. #endif /* SW_WINSYS_H */
  146.