Home | History | Annotate | Download | only in svga
      1 /**********************************************************
      2  * Copyright 2008-2009 VMware, Inc.  All rights reserved.
      3  *
      4  * Permission is hereby granted, free of charge, to any person
      5  * obtaining a copy of this software and associated documentation
      6  * files (the "Software"), to deal in the Software without
      7  * restriction, including without limitation the rights to use, copy,
      8  * modify, merge, publish, distribute, sublicense, and/or sell copies
      9  * of the Software, and to permit persons to whom the Software is
     10  * furnished to do so, subject to the following conditions:
     11  *
     12  * The above copyright notice and this permission notice shall be
     13  * included in all copies or substantial portions of the Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     19  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     20  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     22  * SOFTWARE.
     23  *
     24  **********************************************************/
     25 
     26 #ifndef SVGA_SURFACE_H
     27 #define SVGA_SURFACE_H
     28 
     29 
     30 #include "pipe/p_compiler.h"
     31 #include "pipe/p_state.h"
     32 #include "util/u_inlines.h"
     33 #include "svga_screen_cache.h"
     34 
     35 struct pipe_context;
     36 struct pipe_screen;
     37 struct svga_context;
     38 struct svga_texture;
     39 struct svga_winsys_surface;
     40 enum SVGA3dSurfaceFormat;
     41 
     42 
     43 struct svga_surface
     44 {
     45    struct pipe_surface base;
     46 
     47    struct svga_host_surface_cache_key key;
     48 
     49    /*
     50     * Note that the handle may point at a secondary / backing resource
     51     * created by svga_texture_view_surface() which is something other
     52     * than svga_texture(base->texture)->handle.
     53     */
     54    struct svga_winsys_surface *handle;
     55 
     56    unsigned real_layer;
     57    unsigned real_level;
     58    unsigned real_zslice;
     59 
     60    boolean dirty;
     61 
     62    /* VGPU10 */
     63    SVGA3dRenderTargetViewId view_id;
     64 
     65    /*
     66     * As with 'handle' above, this may point to a secondary / backing resource.
     67     * We can't have one resource bound as both a render target and a shader
     68     * resource at the same time.  But we sometimes want to do that, such as
     69     * for mipmap generation where we sample from one level and render into
     70     * another.
     71     * In this situation, the backed surface is the render target while the
     72     * original surface is the shader resource.
     73     */
     74    struct svga_surface *backed;
     75 };
     76 
     77 
     78 void
     79 svga_mark_surfaces_dirty(struct svga_context *svga);
     80 
     81 extern void
     82 svga_propagate_surface(struct svga_context *svga, struct pipe_surface *surf);
     83 
     84 void
     85 svga_propagate_rendertargets(struct svga_context *svga);
     86 
     87 extern boolean
     88 svga_surface_needs_propagation(const struct pipe_surface *surf);
     89 
     90 struct svga_winsys_surface *
     91 svga_texture_view_surface(struct svga_context *svga,
     92                           struct svga_texture *tex,
     93                           unsigned bind_flags,
     94                           SVGA3dSurfaceFlags flags,
     95                           SVGA3dSurfaceFormat format,
     96                           unsigned start_mip,
     97                           unsigned num_mip,
     98                           int layer_pick,
     99                           unsigned num_layers,
    100                           int zslice_pick,
    101                           struct svga_host_surface_cache_key *key); /* OUT */
    102 
    103 
    104 void
    105 svga_texture_copy_handle(struct svga_context *svga,
    106                          struct svga_winsys_surface *src_handle,
    107                          unsigned src_x, unsigned src_y, unsigned src_z,
    108                          unsigned src_level, unsigned src_face,
    109                          struct svga_winsys_surface *dst_handle,
    110                          unsigned dst_x, unsigned dst_y, unsigned dst_z,
    111                          unsigned dst_level, unsigned dst_face,
    112                          unsigned width, unsigned height, unsigned depth);
    113 
    114 
    115 static inline struct svga_surface *
    116 svga_surface(struct pipe_surface *surface)
    117 {
    118    return (struct svga_surface *)surface;
    119 }
    120 
    121 
    122 static inline const struct svga_surface *
    123 svga_surface_const(const struct pipe_surface *surface)
    124 {
    125    return (const struct svga_surface *)surface;
    126 }
    127 
    128 struct pipe_surface *
    129 svga_validate_surface_view(struct svga_context *svga, struct svga_surface *s);
    130 
    131 static inline SVGA3dResourceType
    132 svga_resource_type(enum pipe_texture_target target)
    133 {
    134    switch (target) {
    135    case PIPE_TEXTURE_1D:
    136    case PIPE_TEXTURE_1D_ARRAY:
    137       return SVGA3D_RESOURCE_TEXTURE1D;
    138    case PIPE_TEXTURE_RECT:
    139    case PIPE_TEXTURE_2D:
    140    case PIPE_TEXTURE_2D_ARRAY:
    141    case PIPE_TEXTURE_CUBE:
    142       /* drawing to cube map is treated as drawing to 2D array */
    143       return SVGA3D_RESOURCE_TEXTURE2D;
    144    case PIPE_TEXTURE_3D:
    145       return SVGA3D_RESOURCE_TEXTURE3D;
    146    default:
    147       assert(!"Unexpected texture target");
    148       return SVGA3D_RESOURCE_TEXTURE2D;
    149    }
    150 }
    151 
    152 #endif
    153