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 VMWARE 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 struct pipe_box;
     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                             const void *front_private,
     94                             unsigned *stride );
     95 
     96    /**
     97     * Used to implement texture_from_handle.
     98     */
     99    struct sw_displaytarget *
    100    (*displaytarget_from_handle)( struct sw_winsys *ws,
    101                                  const struct pipe_resource *templat,
    102                                  struct winsys_handle *whandle,
    103                                  unsigned *stride );
    104 
    105    /**
    106     * Used to implement texture_get_handle.
    107     */
    108    boolean
    109    (*displaytarget_get_handle)( struct sw_winsys *ws,
    110                                 struct sw_displaytarget *dt,
    111                                 struct winsys_handle *whandle );
    112 
    113    /**
    114     * \param flags  bitmask of PIPE_TRANSFER_x flags
    115     */
    116    void *
    117    (*displaytarget_map)( struct sw_winsys *ws,
    118                          struct sw_displaytarget *dt,
    119                          unsigned flags );
    120 
    121    void
    122    (*displaytarget_unmap)( struct sw_winsys *ws,
    123                            struct sw_displaytarget *dt );
    124 
    125    /**
    126     * @sa pipe_screen:flush_frontbuffer.
    127     *
    128     * This call will likely become asynchronous eventually.
    129     */
    130    void
    131    (*displaytarget_display)( struct sw_winsys *ws,
    132                              struct sw_displaytarget *dt,
    133                              void *context_private,
    134                              struct pipe_box *box );
    135 
    136    void
    137    (*displaytarget_destroy)( struct sw_winsys *ws,
    138                              struct sw_displaytarget *dt );
    139 };
    140 
    141 
    142 
    143 #ifdef __cplusplus
    144 }
    145 #endif
    146 
    147 #endif /* SW_WINSYS_H */
    148