svga_surface.h revision bb7f094b3711614953ee699950c7b728efc48c54
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
35struct pipe_context;
36struct pipe_screen;
37struct svga_context;
38struct svga_texture;
39struct svga_winsys_surface;
40enum SVGA3dSurfaceFormat;
41
42
43struct 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
78extern void
79svga_propagate_surface(struct svga_context *svga, struct pipe_surface *surf);
80
81extern boolean
82svga_surface_needs_propagation(const struct pipe_surface *surf);
83
84struct svga_winsys_surface *
85svga_texture_view_surface(struct svga_context *svga,
86                          struct svga_texture *tex,
87                          unsigned bind_flags,
88                          SVGA3dSurfaceFlags flags,
89                          SVGA3dSurfaceFormat format,
90                          unsigned start_mip,
91                          unsigned num_mip,
92                          int layer_pick,
93                          unsigned num_layers,
94                          int zslice_pick,
95                          struct svga_host_surface_cache_key *key); /* OUT */
96
97
98void
99svga_texture_copy_handle(struct svga_context *svga,
100                         struct svga_winsys_surface *src_handle,
101                         unsigned src_x, unsigned src_y, unsigned src_z,
102                         unsigned src_level, unsigned src_face,
103                         struct svga_winsys_surface *dst_handle,
104                         unsigned dst_x, unsigned dst_y, unsigned dst_z,
105                         unsigned dst_level, unsigned dst_face,
106                         unsigned width, unsigned height, unsigned depth);
107
108
109static inline struct svga_surface *
110svga_surface(struct pipe_surface *surface)
111{
112   return (struct svga_surface *)surface;
113}
114
115
116static inline const struct svga_surface *
117svga_surface_const(const struct pipe_surface *surface)
118{
119   return (const struct svga_surface *)surface;
120}
121
122struct pipe_surface *
123svga_validate_surface_view(struct svga_context *svga, struct svga_surface *s);
124
125
126#endif
127