etnaviv: gallium driver for Vivante GPUs
[mesa.git] / src / gallium / drivers / ilo / ilo_blitter.h
1 /*
2 * Mesa 3-D graphics library
3 *
4 * Copyright (C) 2013 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 *
24 * Authors:
25 * Chia-I Wu <olv@lunarg.com>
26 */
27
28 #ifndef ILO_BLITTER_H
29 #define ILO_BLITTER_H
30
31 #include "ilo_common.h"
32 #include "ilo_state.h"
33
34 enum ilo_blitter_uses {
35 ILO_BLITTER_USE_DSA = 1 << 0,
36 ILO_BLITTER_USE_CC = 1 << 1,
37 ILO_BLITTER_USE_VIEWPORT = 1 << 2,
38 ILO_BLITTER_USE_FB_DEPTH = 1 << 3,
39 ILO_BLITTER_USE_FB_STENCIL = 1 << 4,
40 };
41
42 struct blitter_context;
43 struct pipe_resource;
44 struct pipe_surface;
45 struct ilo_context;
46
47 struct ilo_blitter {
48 struct ilo_context *ilo;
49 struct blitter_context *pipe_blitter;
50
51 /*
52 * A minimal context with the goal to send RECTLISTs down the pipeline.
53 */
54 enum ilo_state_raster_earlyz_op earlyz_op;
55 bool earlyz_stencil_clear;
56 uint32_t uses;
57
58 bool initialized;
59
60 float vertices[3][2];
61 struct gen6_3dprimitive_info draw_info;
62
63 uint32_t vf_data[4];
64 struct ilo_state_vf vf;
65
66 struct ilo_state_vs vs;
67 struct ilo_state_hs hs;
68 struct ilo_state_ds ds;
69 struct ilo_state_gs gs;
70
71 struct ilo_state_sol sol;
72
73 struct ilo_state_viewport vp;
74 uint32_t vp_data[20];
75
76 struct ilo_state_sbe sbe;
77 struct ilo_state_ps ps;
78 struct ilo_state_cc cc;
79
80 uint32_t depth_clear_value;
81
82 struct ilo_state_urb urb;
83
84 struct {
85 struct ilo_surface_cso dst;
86 unsigned width, height;
87 unsigned num_samples;
88
89 struct ilo_state_raster rs;
90 } fb;
91 };
92
93 struct ilo_blitter *
94 ilo_blitter_create(struct ilo_context *ilo);
95
96 void
97 ilo_blitter_destroy(struct ilo_blitter *blitter);
98
99 bool
100 ilo_blitter_pipe_blit(struct ilo_blitter *blitter,
101 const struct pipe_blit_info *info);
102
103 bool
104 ilo_blitter_pipe_copy_resource(struct ilo_blitter *blitter,
105 struct pipe_resource *dst, unsigned dst_level,
106 unsigned dst_x, unsigned dst_y, unsigned dst_z,
107 struct pipe_resource *src, unsigned src_level,
108 const struct pipe_box *src_box);
109
110 bool
111 ilo_blitter_pipe_clear_rt(struct ilo_blitter *blitter,
112 struct pipe_surface *rt,
113 const union pipe_color_union *color,
114 unsigned x, unsigned y,
115 unsigned width, unsigned height);
116
117 bool
118 ilo_blitter_pipe_clear_zs(struct ilo_blitter *blitter,
119 struct pipe_surface *zs,
120 unsigned clear_flags,
121 double depth, unsigned stencil,
122 unsigned x, unsigned y,
123 unsigned width, unsigned height);
124
125 bool
126 ilo_blitter_pipe_clear_fb(struct ilo_blitter *blitter,
127 unsigned buffers,
128 const union pipe_color_union *color,
129 double depth, unsigned stencil);
130
131 bool
132 ilo_blitter_blt_copy_resource(struct ilo_blitter *blitter,
133 struct pipe_resource *dst, unsigned dst_level,
134 unsigned dst_x, unsigned dst_y, unsigned dst_z,
135 struct pipe_resource *src, unsigned src_level,
136 const struct pipe_box *src_box);
137
138 bool
139 ilo_blitter_blt_clear_rt(struct ilo_blitter *blitter,
140 struct pipe_surface *rt,
141 const union pipe_color_union *color,
142 unsigned x, unsigned y,
143 unsigned width, unsigned height);
144
145 bool
146 ilo_blitter_blt_clear_zs(struct ilo_blitter *blitter,
147 struct pipe_surface *zs,
148 unsigned clear_flags,
149 double depth, unsigned stencil,
150 unsigned x, unsigned y,
151 unsigned width, unsigned height);
152
153 bool
154 ilo_blitter_rectlist_clear_zs(struct ilo_blitter *blitter,
155 struct pipe_surface *zs,
156 unsigned clear_flags,
157 double depth, unsigned stencil);
158
159 void
160 ilo_blitter_rectlist_resolve_z(struct ilo_blitter *blitter,
161 struct pipe_resource *res,
162 unsigned level, unsigned slice);
163
164 void
165 ilo_blitter_rectlist_resolve_hiz(struct ilo_blitter *blitter,
166 struct pipe_resource *res,
167 unsigned level, unsigned slice);
168
169 #endif /* ILO_BLITTER_H */