2 * Mesa 3-D graphics library
4 * Copyright (C) 2013 LunarG, Inc.
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:
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
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.
25 * Chia-I Wu <olv@lunarg.com>
31 #include "ilo_common.h"
32 #include "ilo_state.h"
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,
42 struct blitter_context
;
48 struct ilo_context
*ilo
;
49 struct blitter_context
*pipe_blitter
;
52 * A minimal context with the goal to send RECTLISTs down the pipeline.
54 enum ilo_state_raster_earlyz_op earlyz_op
;
55 bool earlyz_stencil_clear
;
61 struct pipe_draw_info draw
;
64 struct ilo_state_vf vf
;
65 struct ilo_state_sol sol
;
67 struct ilo_state_viewport vp
;
70 struct ilo_state_sbe sbe
;
71 struct ilo_state_cc cc
;
73 uint32_t depth_clear_value
;
75 struct ilo_state_urb urb
;
78 struct ilo_surface_cso dst
;
79 unsigned width
, height
;
82 struct ilo_state_raster rs
;
87 ilo_blitter_create(struct ilo_context
*ilo
);
90 ilo_blitter_destroy(struct ilo_blitter
*blitter
);
93 ilo_blitter_pipe_blit(struct ilo_blitter
*blitter
,
94 const struct pipe_blit_info
*info
);
97 ilo_blitter_pipe_copy_resource(struct ilo_blitter
*blitter
,
98 struct pipe_resource
*dst
, unsigned dst_level
,
99 unsigned dst_x
, unsigned dst_y
, unsigned dst_z
,
100 struct pipe_resource
*src
, unsigned src_level
,
101 const struct pipe_box
*src_box
);
104 ilo_blitter_pipe_clear_rt(struct ilo_blitter
*blitter
,
105 struct pipe_surface
*rt
,
106 const union pipe_color_union
*color
,
107 unsigned x
, unsigned y
,
108 unsigned width
, unsigned height
);
111 ilo_blitter_pipe_clear_zs(struct ilo_blitter
*blitter
,
112 struct pipe_surface
*zs
,
113 unsigned clear_flags
,
114 double depth
, unsigned stencil
,
115 unsigned x
, unsigned y
,
116 unsigned width
, unsigned height
);
119 ilo_blitter_pipe_clear_fb(struct ilo_blitter
*blitter
,
121 const union pipe_color_union
*color
,
122 double depth
, unsigned stencil
);
125 ilo_blitter_blt_copy_resource(struct ilo_blitter
*blitter
,
126 struct pipe_resource
*dst
, unsigned dst_level
,
127 unsigned dst_x
, unsigned dst_y
, unsigned dst_z
,
128 struct pipe_resource
*src
, unsigned src_level
,
129 const struct pipe_box
*src_box
);
132 ilo_blitter_blt_clear_rt(struct ilo_blitter
*blitter
,
133 struct pipe_surface
*rt
,
134 const union pipe_color_union
*color
,
135 unsigned x
, unsigned y
,
136 unsigned width
, unsigned height
);
139 ilo_blitter_blt_clear_zs(struct ilo_blitter
*blitter
,
140 struct pipe_surface
*zs
,
141 unsigned clear_flags
,
142 double depth
, unsigned stencil
,
143 unsigned x
, unsigned y
,
144 unsigned width
, unsigned height
);
147 ilo_blitter_rectlist_clear_zs(struct ilo_blitter
*blitter
,
148 struct pipe_surface
*zs
,
149 unsigned clear_flags
,
150 double depth
, unsigned stencil
);
153 ilo_blitter_rectlist_resolve_z(struct ilo_blitter
*blitter
,
154 struct pipe_resource
*res
,
155 unsigned level
, unsigned slice
);
158 ilo_blitter_rectlist_resolve_hiz(struct ilo_blitter
*blitter
,
159 struct pipe_resource
*res
,
160 unsigned level
, unsigned slice
);
162 #endif /* ILO_BLITTER_H */