Home | History | Annotate | Download | only in state_tracker
      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