• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Mesa 3-D graphics library
3  *
4  * Copyright (C) 2015 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_STATE_SHADER_H
29 #define ILO_STATE_SHADER_H
30 
31 #include "genhw/genhw.h"
32 
33 #include "ilo_core.h"
34 #include "ilo_dev.h"
35 
36 /**
37  * Kernel information.
38  */
39 struct ilo_state_shader_kernel_info {
40    /* usually 0 unless the shader has multiple kernels */
41    uint32_t offset;
42 
43    uint8_t grf_start;
44    uint8_t pcb_attr_count;
45 };
46 
47 /**
48  * Shader resources.
49  */
50 struct ilo_state_shader_resource_info {
51    /* for prefetches */
52    uint8_t sampler_count;
53    uint8_t surface_count;
54 
55    bool has_uav;
56 };
57 
58 /**
59  * URB inputs/outputs.
60  */
61 struct ilo_state_shader_urb_info {
62    uint8_t cv_input_attr_count;
63 
64    uint8_t read_base;
65    uint8_t read_count;
66 
67    uint8_t output_attr_count;
68 
69    uint8_t user_cull_enables;
70    uint8_t user_clip_enables;
71 };
72 
73 struct ilo_state_vs_info {
74    struct ilo_state_shader_kernel_info kernel;
75    struct ilo_state_shader_resource_info resource;
76    struct ilo_state_shader_urb_info urb;
77 
78    uint32_t per_thread_scratch_size;
79    bool dispatch_enable;
80    bool stats_enable;
81 };
82 
83 struct ilo_state_hs_info {
84    struct ilo_state_shader_kernel_info kernel;
85    struct ilo_state_shader_resource_info resource;
86    struct ilo_state_shader_urb_info urb;
87 
88    uint32_t per_thread_scratch_size;
89    bool dispatch_enable;
90    bool stats_enable;
91 };
92 
93 struct ilo_state_ds_info {
94    struct ilo_state_shader_kernel_info kernel;
95    struct ilo_state_shader_resource_info resource;
96    struct ilo_state_shader_urb_info urb;
97 
98    uint32_t per_thread_scratch_size;
99    bool dispatch_enable;
100    bool stats_enable;
101 };
102 
103 /**
104  * Stream output.  Must be consistent with ilo_state_sol_info.
105  */
106 struct ilo_state_gs_sol_info {
107    bool sol_enable;
108    bool stats_enable;
109    bool render_disable;
110 
111    uint16_t svbi_post_inc;
112 
113    enum gen_reorder_mode tristrip_reorder;
114 };
115 
116 struct ilo_state_gs_info {
117    struct ilo_state_shader_kernel_info kernel;
118    struct ilo_state_shader_resource_info resource;
119    struct ilo_state_shader_urb_info urb;
120 
121    struct ilo_state_gs_sol_info sol;
122 
123    uint32_t per_thread_scratch_size;
124    bool dispatch_enable;
125    bool stats_enable;
126 };
127 
128 struct ilo_state_ps_io_info {
129    /* inputs */
130    enum gen_position_offset posoffset;
131    uint8_t attr_count;
132    bool use_z;
133    bool use_w;
134    bool use_coverage_mask;
135 
136    /* outputs */
137    enum gen_pscdepth_mode pscdepth;
138    bool has_rt_write;
139    bool write_pixel_mask;
140    bool write_omask;
141 };
142 
143 struct ilo_state_ps_params_info {
144    /* compatibility with raster states */
145    uint32_t sample_mask;
146    bool earlyz_control_psexec;
147 
148    /* compatibility with cc states */
149    bool alpha_may_kill;
150    bool dual_source_blending;
151    bool has_writeable_rt;
152 };
153 
154 struct ilo_state_ps_info {
155    struct ilo_state_shader_kernel_info kernel_8;
156    struct ilo_state_shader_kernel_info kernel_16;
157    struct ilo_state_shader_kernel_info kernel_32;
158    struct ilo_state_shader_resource_info resource;
159 
160    struct ilo_state_ps_io_info io;
161    struct ilo_state_ps_params_info params;
162 
163    uint32_t per_thread_scratch_size;
164 
165    /* bitmask of GEN6_PS_DISPATCH_x */
166    uint8_t valid_kernels;
167    bool per_sample_dispatch;
168    bool sample_count_one;
169    bool cv_per_sample_interp;
170    bool cv_has_earlyz_op;
171 
172    bool rt_clear_enable;
173    bool rt_resolve_enable;
174 
175    bool cv_has_depth_buffer;
176 };
177 
178 struct ilo_state_vs {
179    uint32_t vs[5];
180    uint32_t scratch_size;
181 };
182 
183 struct ilo_state_hs {
184    uint32_t hs[4];
185    uint32_t scratch_size;
186 };
187 
188 struct ilo_state_ds {
189    uint32_t te[3];
190    uint32_t ds[5];
191    uint32_t scratch_size;
192 };
193 
194 struct ilo_state_gs {
195    uint32_t gs[5];
196    uint32_t scratch_size;
197 };
198 
199 struct ilo_state_ps {
200    uint32_t ps[8];
201    uint32_t scratch_size;
202 
203    struct ilo_state_ps_dispatch_conds {
204       bool ps_valid;
205 
206       bool has_rt_write;
207       bool write_odepth;
208       bool write_ostencil;
209       bool has_uav_write;
210       bool ps_may_kill;
211    } conds;
212 };
213 
214 bool
215 ilo_state_vs_init(struct ilo_state_vs *vs,
216                   const struct ilo_dev *dev,
217                   const struct ilo_state_vs_info *info);
218 
219 bool
220 ilo_state_vs_init_disabled(struct ilo_state_vs *vs,
221                            const struct ilo_dev *dev);
222 
223 static inline uint32_t
ilo_state_vs_get_scratch_size(const struct ilo_state_vs * vs)224 ilo_state_vs_get_scratch_size(const struct ilo_state_vs *vs)
225 {
226    return vs->scratch_size;
227 }
228 
229 bool
230 ilo_state_hs_init(struct ilo_state_hs *hs,
231                   const struct ilo_dev *dev,
232                   const struct ilo_state_hs_info *info);
233 
234 bool
235 ilo_state_hs_init_disabled(struct ilo_state_hs *hs,
236                            const struct ilo_dev *dev);
237 
238 
239 static inline uint32_t
ilo_state_hs_get_scratch_size(const struct ilo_state_hs * hs)240 ilo_state_hs_get_scratch_size(const struct ilo_state_hs *hs)
241 {
242    return hs->scratch_size;
243 }
244 
245 bool
246 ilo_state_ds_init(struct ilo_state_ds *ds,
247                   const struct ilo_dev *dev,
248                   const struct ilo_state_ds_info *info);
249 
250 bool
251 ilo_state_ds_init_disabled(struct ilo_state_ds *ds,
252                            const struct ilo_dev *dev);
253 
254 static inline uint32_t
ilo_state_ds_get_scratch_size(const struct ilo_state_ds * ds)255 ilo_state_ds_get_scratch_size(const struct ilo_state_ds *ds)
256 {
257    return ds->scratch_size;
258 }
259 
260 bool
261 ilo_state_gs_init(struct ilo_state_gs *gs,
262                   const struct ilo_dev *dev,
263                   const struct ilo_state_gs_info *info);
264 
265 bool
266 ilo_state_gs_init_disabled(struct ilo_state_gs *gs,
267                            const struct ilo_dev *dev);
268 
269 static inline uint32_t
ilo_state_gs_get_scratch_size(const struct ilo_state_gs * gs)270 ilo_state_gs_get_scratch_size(const struct ilo_state_gs *gs)
271 {
272    return gs->scratch_size;
273 }
274 
275 bool
276 ilo_state_ps_init(struct ilo_state_ps *ps,
277                   const struct ilo_dev *dev,
278                   const struct ilo_state_ps_info *info);
279 
280 bool
281 ilo_state_ps_init_disabled(struct ilo_state_ps *ps,
282                            const struct ilo_dev *dev);
283 
284 bool
285 ilo_state_ps_set_params(struct ilo_state_ps *ps,
286                         const struct ilo_dev *dev,
287                         const struct ilo_state_ps_params_info *params);
288 
289 static inline uint32_t
ilo_state_ps_get_scratch_size(const struct ilo_state_ps * ps)290 ilo_state_ps_get_scratch_size(const struct ilo_state_ps *ps)
291 {
292    return ps->scratch_size;
293 }
294 
295 #endif /* ILO_STATE_SHADER_H */
296