1*bbecb9d1SAndroid Build Coastguard Worker /**************************************************************************
2*bbecb9d1SAndroid Build Coastguard Worker *
3*bbecb9d1SAndroid Build Coastguard Worker * Copyright (C) 2014 Red Hat Inc.
4*bbecb9d1SAndroid Build Coastguard Worker *
5*bbecb9d1SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
6*bbecb9d1SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
7*bbecb9d1SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
8*bbecb9d1SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*bbecb9d1SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
10*bbecb9d1SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
11*bbecb9d1SAndroid Build Coastguard Worker *
12*bbecb9d1SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included
13*bbecb9d1SAndroid Build Coastguard Worker * in all copies or substantial portions of the Software.
14*bbecb9d1SAndroid Build Coastguard Worker *
15*bbecb9d1SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16*bbecb9d1SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*bbecb9d1SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*bbecb9d1SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19*bbecb9d1SAndroid Build Coastguard Worker * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20*bbecb9d1SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21*bbecb9d1SAndroid Build Coastguard Worker * OTHER DEALINGS IN THE SOFTWARE.
22*bbecb9d1SAndroid Build Coastguard Worker *
23*bbecb9d1SAndroid Build Coastguard Worker **************************************************************************/
24*bbecb9d1SAndroid Build Coastguard Worker
25*bbecb9d1SAndroid Build Coastguard Worker #ifndef VREND_SHADER_H
26*bbecb9d1SAndroid Build Coastguard Worker #define VREND_SHADER_H
27*bbecb9d1SAndroid Build Coastguard Worker
28*bbecb9d1SAndroid Build Coastguard Worker #include "pipe/p_state.h"
29*bbecb9d1SAndroid Build Coastguard Worker #include "pipe/p_shader_tokens.h"
30*bbecb9d1SAndroid Build Coastguard Worker
31*bbecb9d1SAndroid Build Coastguard Worker #include "vrend_strbuf.h"
32*bbecb9d1SAndroid Build Coastguard Worker
33*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_NUM_CLIP_PLANES 8
34*bbecb9d1SAndroid Build Coastguard Worker
35*bbecb9d1SAndroid Build Coastguard Worker #define VREND_POLYGON_STIPPLE_SIZE 32
36*bbecb9d1SAndroid Build Coastguard Worker
37*bbecb9d1SAndroid Build Coastguard Worker #define VREND_SHADER_SAMPLER_VIEWS_MASK_LENGTH \
38*bbecb9d1SAndroid Build Coastguard Worker ((PIPE_MAX_SHADER_SAMPLER_VIEWS + 63) / 64)
39*bbecb9d1SAndroid Build Coastguard Worker
40*bbecb9d1SAndroid Build Coastguard Worker enum gl_advanced_blend_mode
41*bbecb9d1SAndroid Build Coastguard Worker {
42*bbecb9d1SAndroid Build Coastguard Worker BLEND_NONE = 0,
43*bbecb9d1SAndroid Build Coastguard Worker BLEND_MULTIPLY,
44*bbecb9d1SAndroid Build Coastguard Worker BLEND_SCREEN,
45*bbecb9d1SAndroid Build Coastguard Worker BLEND_OVERLAY,
46*bbecb9d1SAndroid Build Coastguard Worker BLEND_DARKEN,
47*bbecb9d1SAndroid Build Coastguard Worker BLEND_LIGHTEN,
48*bbecb9d1SAndroid Build Coastguard Worker BLEND_COLORDODGE,
49*bbecb9d1SAndroid Build Coastguard Worker BLEND_COLORBURN,
50*bbecb9d1SAndroid Build Coastguard Worker BLEND_HARDLIGHT,
51*bbecb9d1SAndroid Build Coastguard Worker BLEND_SOFTLIGHT,
52*bbecb9d1SAndroid Build Coastguard Worker BLEND_DIFFERENCE,
53*bbecb9d1SAndroid Build Coastguard Worker BLEND_EXCLUSION,
54*bbecb9d1SAndroid Build Coastguard Worker BLEND_HSL_HUE,
55*bbecb9d1SAndroid Build Coastguard Worker BLEND_HSL_SATURATION,
56*bbecb9d1SAndroid Build Coastguard Worker BLEND_HSL_COLOR,
57*bbecb9d1SAndroid Build Coastguard Worker BLEND_HSL_LUMINOSITY,
58*bbecb9d1SAndroid Build Coastguard Worker BLEND_ALL
59*bbecb9d1SAndroid Build Coastguard Worker };
60*bbecb9d1SAndroid Build Coastguard Worker
61*bbecb9d1SAndroid Build Coastguard Worker
62*bbecb9d1SAndroid Build Coastguard Worker /* need to store patching info for interpolation */
63*bbecb9d1SAndroid Build Coastguard Worker struct vrend_interp_info {
64*bbecb9d1SAndroid Build Coastguard Worker unsigned semantic_name : 6;
65*bbecb9d1SAndroid Build Coastguard Worker unsigned semantic_index : 16;
66*bbecb9d1SAndroid Build Coastguard Worker unsigned interpolate : 3;
67*bbecb9d1SAndroid Build Coastguard Worker unsigned location : 3;
68*bbecb9d1SAndroid Build Coastguard Worker };
69*bbecb9d1SAndroid Build Coastguard Worker
70*bbecb9d1SAndroid Build Coastguard Worker struct vrend_array {
71*bbecb9d1SAndroid Build Coastguard Worker int first;
72*bbecb9d1SAndroid Build Coastguard Worker int array_size;
73*bbecb9d1SAndroid Build Coastguard Worker };
74*bbecb9d1SAndroid Build Coastguard Worker
75*bbecb9d1SAndroid Build Coastguard Worker struct vrend_layout_info {
76*bbecb9d1SAndroid Build Coastguard Worker unsigned name : 6;
77*bbecb9d1SAndroid Build Coastguard Worker unsigned sid : 16 ;
78*bbecb9d1SAndroid Build Coastguard Worker unsigned location : 16 ;
79*bbecb9d1SAndroid Build Coastguard Worker unsigned array_id : 16 ;
80*bbecb9d1SAndroid Build Coastguard Worker };
81*bbecb9d1SAndroid Build Coastguard Worker
82*bbecb9d1SAndroid Build Coastguard Worker struct vrend_fs_shader_info {
83*bbecb9d1SAndroid Build Coastguard Worker int num_interps;
84*bbecb9d1SAndroid Build Coastguard Worker int glsl_ver;
85*bbecb9d1SAndroid Build Coastguard Worker bool has_sample_input;
86*bbecb9d1SAndroid Build Coastguard Worker bool has_noperspective;
87*bbecb9d1SAndroid Build Coastguard Worker struct vrend_interp_info interpinfo[PIPE_MAX_SHADER_INPUTS];
88*bbecb9d1SAndroid Build Coastguard Worker };
89*bbecb9d1SAndroid Build Coastguard Worker
90*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_info_out {
91*bbecb9d1SAndroid Build Coastguard Worker uint8_t num_generic_and_patch;
92*bbecb9d1SAndroid Build Coastguard Worker uint8_t num_indirect_generic;
93*bbecb9d1SAndroid Build Coastguard Worker uint8_t num_indirect_patch;
94*bbecb9d1SAndroid Build Coastguard Worker bool guest_sent_io_arrays;
95*bbecb9d1SAndroid Build Coastguard Worker };
96*bbecb9d1SAndroid Build Coastguard Worker
97*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_info_in {
98*bbecb9d1SAndroid Build Coastguard Worker uint64_t generic_emitted_mask;
99*bbecb9d1SAndroid Build Coastguard Worker uint64_t texcoord_emitted_mask;
100*bbecb9d1SAndroid Build Coastguard Worker bool indirect_generic_or_patch : 1;
101*bbecb9d1SAndroid Build Coastguard Worker bool use_pervertex : 1;
102*bbecb9d1SAndroid Build Coastguard Worker };
103*bbecb9d1SAndroid Build Coastguard Worker
104*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_io_array {
105*bbecb9d1SAndroid Build Coastguard Worker enum tgsi_semantic name : 6;
106*bbecb9d1SAndroid Build Coastguard Worker uint32_t sid : 6;
107*bbecb9d1SAndroid Build Coastguard Worker uint32_t size : 6;
108*bbecb9d1SAndroid Build Coastguard Worker uint32_t array_id : 6;
109*bbecb9d1SAndroid Build Coastguard Worker uint32_t padding : 8;
110*bbecb9d1SAndroid Build Coastguard Worker };
111*bbecb9d1SAndroid Build Coastguard Worker
112*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_io_array_info {
113*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_arrays;
114*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_io_array layout[16];
115*bbecb9d1SAndroid Build Coastguard Worker };
116*bbecb9d1SAndroid Build Coastguard Worker
117*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_info {
118*bbecb9d1SAndroid Build Coastguard Worker uint32_t invariant_outputs[4];
119*bbecb9d1SAndroid Build Coastguard Worker uint64_t in_generic_emitted_mask;
120*bbecb9d1SAndroid Build Coastguard Worker uint64_t in_texcoord_emitted_mask;
121*bbecb9d1SAndroid Build Coastguard Worker
122*bbecb9d1SAndroid Build Coastguard Worker uint64_t out_generic_emitted_mask;
123*bbecb9d1SAndroid Build Coastguard Worker uint64_t out_patch_emitted_mask;
124*bbecb9d1SAndroid Build Coastguard Worker
125*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_io_array_info output_arrays;
126*bbecb9d1SAndroid Build Coastguard Worker
127*bbecb9d1SAndroid Build Coastguard Worker struct vrend_array *sampler_arrays;
128*bbecb9d1SAndroid Build Coastguard Worker struct vrend_array *image_arrays;
129*bbecb9d1SAndroid Build Coastguard Worker char **so_names;
130*bbecb9d1SAndroid Build Coastguard Worker struct pipe_stream_output_info so_info;
131*bbecb9d1SAndroid Build Coastguard Worker
132*bbecb9d1SAndroid Build Coastguard Worker /* 8 cbufs + depth + stencil + samplemask */
133*bbecb9d1SAndroid Build Coastguard Worker int8_t fs_output_layout[12];
134*bbecb9d1SAndroid Build Coastguard Worker
135*bbecb9d1SAndroid Build Coastguard Worker uint32_t samplers_used_mask;
136*bbecb9d1SAndroid Build Coastguard Worker uint32_t images_used_mask;
137*bbecb9d1SAndroid Build Coastguard Worker uint32_t ubo_used_mask;
138*bbecb9d1SAndroid Build Coastguard Worker uint32_t ssbo_used_mask;
139*bbecb9d1SAndroid Build Coastguard Worker uint32_t shadow_samp_mask;
140*bbecb9d1SAndroid Build Coastguard Worker uint32_t attrib_input_mask;
141*bbecb9d1SAndroid Build Coastguard Worker uint32_t fs_blend_equation_advanced;
142*bbecb9d1SAndroid Build Coastguard Worker uint32_t fog_input_mask;
143*bbecb9d1SAndroid Build Coastguard Worker uint32_t fog_output_mask;
144*bbecb9d1SAndroid Build Coastguard Worker
145*bbecb9d1SAndroid Build Coastguard Worker int num_consts;
146*bbecb9d1SAndroid Build Coastguard Worker int num_inputs;
147*bbecb9d1SAndroid Build Coastguard Worker int num_outputs;
148*bbecb9d1SAndroid Build Coastguard Worker int gs_out_prim;
149*bbecb9d1SAndroid Build Coastguard Worker int tes_prim;
150*bbecb9d1SAndroid Build Coastguard Worker int num_sampler_arrays;
151*bbecb9d1SAndroid Build Coastguard Worker int num_image_arrays;
152*bbecb9d1SAndroid Build Coastguard Worker
153*bbecb9d1SAndroid Build Coastguard Worker uint8_t out_texcoord_emitted_mask;
154*bbecb9d1SAndroid Build Coastguard Worker uint8_t ubo_indirect : 1;
155*bbecb9d1SAndroid Build Coastguard Worker uint8_t tes_point_mode : 1;
156*bbecb9d1SAndroid Build Coastguard Worker uint8_t gles_use_tex_query_level : 1;
157*bbecb9d1SAndroid Build Coastguard Worker uint8_t separable_program : 1;
158*bbecb9d1SAndroid Build Coastguard Worker uint8_t has_input_arrays : 1;
159*bbecb9d1SAndroid Build Coastguard Worker uint8_t has_output_arrays : 1;
160*bbecb9d1SAndroid Build Coastguard Worker uint8_t use_pervertex_in : 1;
161*bbecb9d1SAndroid Build Coastguard Worker };
162*bbecb9d1SAndroid Build Coastguard Worker
163*bbecb9d1SAndroid Build Coastguard Worker struct vrend_variable_shader_info {
164*bbecb9d1SAndroid Build Coastguard Worker struct vrend_fs_shader_info fs_info;
165*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_in_clip:4;
166*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_in_cull:4;
167*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_out_clip:4;
168*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_out_cull:4;
169*bbecb9d1SAndroid Build Coastguard Worker int num_ucp;
170*bbecb9d1SAndroid Build Coastguard Worker int legacy_color_bits;
171*bbecb9d1SAndroid Build Coastguard Worker };
172*bbecb9d1SAndroid Build Coastguard Worker
173*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_key {
174*bbecb9d1SAndroid Build Coastguard Worker uint64_t out_generic_expected_mask;
175*bbecb9d1SAndroid Build Coastguard Worker uint64_t out_texcoord_expected_mask;
176*bbecb9d1SAndroid Build Coastguard Worker
177*bbecb9d1SAndroid Build Coastguard Worker uint64_t in_generic_expected_mask;
178*bbecb9d1SAndroid Build Coastguard Worker uint64_t in_texcoord_expected_mask;
179*bbecb9d1SAndroid Build Coastguard Worker uint64_t in_patch_expected_mask;
180*bbecb9d1SAndroid Build Coastguard Worker
181*bbecb9d1SAndroid Build Coastguard Worker uint32_t force_invariant_inputs[4];
182*bbecb9d1SAndroid Build Coastguard Worker
183*bbecb9d1SAndroid Build Coastguard Worker struct vrend_fs_shader_info fs_info;
184*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_io_array_info in_arrays;
185*bbecb9d1SAndroid Build Coastguard Worker
186*bbecb9d1SAndroid Build Coastguard Worker union {
187*bbecb9d1SAndroid Build Coastguard Worker struct {
188*bbecb9d1SAndroid Build Coastguard Worker uint8_t surface_component_bits[PIPE_MAX_COLOR_BUFS];
189*bbecb9d1SAndroid Build Coastguard Worker uint32_t coord_replace;
190*bbecb9d1SAndroid Build Coastguard Worker uint8_t swizzle_output_rgb_to_bgr;
191*bbecb9d1SAndroid Build Coastguard Worker uint8_t needs_manual_srgb_encode_bitmask;
192*bbecb9d1SAndroid Build Coastguard Worker uint8_t cbufs_are_a8_bitmask;
193*bbecb9d1SAndroid Build Coastguard Worker uint8_t cbufs_signed_int_bitmask;
194*bbecb9d1SAndroid Build Coastguard Worker uint8_t cbufs_unsigned_int_bitmask;
195*bbecb9d1SAndroid Build Coastguard Worker uint32_t logicop_func : 4;
196*bbecb9d1SAndroid Build Coastguard Worker uint32_t logicop_enabled : 1;
197*bbecb9d1SAndroid Build Coastguard Worker uint32_t prim_is_points : 1;
198*bbecb9d1SAndroid Build Coastguard Worker uint32_t lower_left_origin : 1;
199*bbecb9d1SAndroid Build Coastguard Worker uint32_t available_color_in_bits : 4;
200*bbecb9d1SAndroid Build Coastguard Worker } fs;
201*bbecb9d1SAndroid Build Coastguard Worker
202*bbecb9d1SAndroid Build Coastguard Worker struct {
203*bbecb9d1SAndroid Build Coastguard Worker uint32_t attrib_signed_int_bitmask;
204*bbecb9d1SAndroid Build Coastguard Worker uint32_t attrib_unsigned_int_bitmask;
205*bbecb9d1SAndroid Build Coastguard Worker uint32_t attrib_zyxw_bitmask;
206*bbecb9d1SAndroid Build Coastguard Worker uint32_t fog_fixup_mask;
207*bbecb9d1SAndroid Build Coastguard Worker } vs;
208*bbecb9d1SAndroid Build Coastguard Worker
209*bbecb9d1SAndroid Build Coastguard Worker struct {
210*bbecb9d1SAndroid Build Coastguard Worker uint32_t emit_clip_distance : 1;
211*bbecb9d1SAndroid Build Coastguard Worker } gs;
212*bbecb9d1SAndroid Build Coastguard Worker };
213*bbecb9d1SAndroid Build Coastguard Worker
214*bbecb9d1SAndroid Build Coastguard Worker uint64_t sampler_views_lower_swizzle_mask[VREND_SHADER_SAMPLER_VIEWS_MASK_LENGTH];
215*bbecb9d1SAndroid Build Coastguard Worker uint64_t sampler_views_emulated_rect_mask[VREND_SHADER_SAMPLER_VIEWS_MASK_LENGTH];
216*bbecb9d1SAndroid Build Coastguard Worker uint16_t tex_swizzle[PIPE_MAX_SHADER_SAMPLER_VIEWS];
217*bbecb9d1SAndroid Build Coastguard Worker
218*bbecb9d1SAndroid Build Coastguard Worker uint8_t alpha_test;
219*bbecb9d1SAndroid Build Coastguard Worker uint8_t num_in_cull : 4;
220*bbecb9d1SAndroid Build Coastguard Worker uint8_t num_in_clip : 4;
221*bbecb9d1SAndroid Build Coastguard Worker uint8_t num_out_cull : 4;
222*bbecb9d1SAndroid Build Coastguard Worker uint8_t num_out_clip : 4;
223*bbecb9d1SAndroid Build Coastguard Worker uint8_t pstipple_enabled : 1;
224*bbecb9d1SAndroid Build Coastguard Worker uint8_t add_alpha_test : 1;
225*bbecb9d1SAndroid Build Coastguard Worker uint8_t color_two_side : 1;
226*bbecb9d1SAndroid Build Coastguard Worker uint8_t gs_present : 1;
227*bbecb9d1SAndroid Build Coastguard Worker uint8_t tcs_present : 1;
228*bbecb9d1SAndroid Build Coastguard Worker uint8_t tes_present : 1;
229*bbecb9d1SAndroid Build Coastguard Worker uint8_t flatshade : 1;
230*bbecb9d1SAndroid Build Coastguard Worker uint8_t require_input_arrays : 1;
231*bbecb9d1SAndroid Build Coastguard Worker uint8_t require_output_arrays : 1;
232*bbecb9d1SAndroid Build Coastguard Worker uint8_t use_pervertex_in : 1;
233*bbecb9d1SAndroid Build Coastguard Worker };
234*bbecb9d1SAndroid Build Coastguard Worker
235*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_cfg {
236*bbecb9d1SAndroid Build Coastguard Worker uint32_t glsl_version : 12;
237*bbecb9d1SAndroid Build Coastguard Worker uint32_t max_draw_buffers : 4;
238*bbecb9d1SAndroid Build Coastguard Worker uint32_t max_shader_patch_varyings : 6;
239*bbecb9d1SAndroid Build Coastguard Worker uint32_t use_gles : 1;
240*bbecb9d1SAndroid Build Coastguard Worker uint32_t use_core_profile : 1;
241*bbecb9d1SAndroid Build Coastguard Worker uint32_t use_explicit_locations : 1;
242*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_arrays_of_arrays : 1;
243*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_gpu_shader5 : 1;
244*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_es31_compat : 1;
245*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_conservative_depth : 1;
246*bbecb9d1SAndroid Build Coastguard Worker uint32_t use_integer : 1;
247*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_dual_src_blend : 1;
248*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_fbfetch_coherent : 1;
249*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_cull_distance : 1;
250*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_nopersective : 1;
251*bbecb9d1SAndroid Build Coastguard Worker uint32_t has_texture_shadow_lod : 1;
252*bbecb9d1SAndroid Build Coastguard Worker };
253*bbecb9d1SAndroid Build Coastguard Worker
254*bbecb9d1SAndroid Build Coastguard Worker struct vrend_context;
255*bbecb9d1SAndroid Build Coastguard Worker
256*bbecb9d1SAndroid Build Coastguard Worker #define SHADER_MAX_STRINGS 3
257*bbecb9d1SAndroid Build Coastguard Worker #define SHADER_STRING_VER_EXT 0
258*bbecb9d1SAndroid Build Coastguard Worker #define SHADER_STRING_HDR 1
259*bbecb9d1SAndroid Build Coastguard Worker
260*bbecb9d1SAndroid Build Coastguard Worker bool vrend_convert_shader(const struct vrend_context *rctx,
261*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_shader_cfg *cfg,
262*bbecb9d1SAndroid Build Coastguard Worker const struct tgsi_token *tokens,
263*bbecb9d1SAndroid Build Coastguard Worker uint32_t req_local_mem,
264*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_shader_key *key,
265*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_info *sinfo,
266*bbecb9d1SAndroid Build Coastguard Worker struct vrend_variable_shader_info *var_sinfo,
267*bbecb9d1SAndroid Build Coastguard Worker struct vrend_strarray *shader);
268*bbecb9d1SAndroid Build Coastguard Worker
269*bbecb9d1SAndroid Build Coastguard Worker const char *vrend_shader_samplertypeconv(bool use_gles, int sampler_type);
270*bbecb9d1SAndroid Build Coastguard Worker
271*bbecb9d1SAndroid Build Coastguard Worker char vrend_shader_samplerreturnconv(enum tgsi_return_type type);
272*bbecb9d1SAndroid Build Coastguard Worker
273*bbecb9d1SAndroid Build Coastguard Worker int vrend_shader_lookup_sampler_array(const struct vrend_shader_info *sinfo, int index);
274*bbecb9d1SAndroid Build Coastguard Worker
275*bbecb9d1SAndroid Build Coastguard Worker bool vrend_shader_create_passthrough_tcs(const struct vrend_context *ctx,
276*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_shader_cfg *cfg,
277*bbecb9d1SAndroid Build Coastguard Worker const struct tgsi_token *vs_info,
278*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_shader_key *key,
279*bbecb9d1SAndroid Build Coastguard Worker const float tess_factors[6],
280*bbecb9d1SAndroid Build Coastguard Worker struct vrend_shader_info *sinfo,
281*bbecb9d1SAndroid Build Coastguard Worker struct vrend_strarray *shader,
282*bbecb9d1SAndroid Build Coastguard Worker int vertices_per_patch);
283*bbecb9d1SAndroid Build Coastguard Worker
284*bbecb9d1SAndroid Build Coastguard Worker bool vrend_shader_needs_alpha_func(const struct vrend_shader_key *key);
285*bbecb9d1SAndroid Build Coastguard Worker
286*bbecb9d1SAndroid Build Coastguard Worker bool vrend_shader_query_separable_program(const struct tgsi_token *tokens,
287*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_shader_cfg *cfg);
288*bbecb9d1SAndroid Build Coastguard Worker
vrend_shader_sampler_views_mask_get(const uint64_t mask[static VREND_SHADER_SAMPLER_VIEWS_MASK_LENGTH],int index)289*bbecb9d1SAndroid Build Coastguard Worker static inline bool vrend_shader_sampler_views_mask_get(
290*bbecb9d1SAndroid Build Coastguard Worker const uint64_t mask[static VREND_SHADER_SAMPLER_VIEWS_MASK_LENGTH],
291*bbecb9d1SAndroid Build Coastguard Worker int index)
292*bbecb9d1SAndroid Build Coastguard Worker {
293*bbecb9d1SAndroid Build Coastguard Worker return (mask[index / 64] >> (index % 64)) & 1;
294*bbecb9d1SAndroid Build Coastguard Worker }
295*bbecb9d1SAndroid Build Coastguard Worker
vrend_shader_sampler_views_mask_set(uint64_t mask[static VREND_SHADER_SAMPLER_VIEWS_MASK_LENGTH],int index)296*bbecb9d1SAndroid Build Coastguard Worker static inline void vrend_shader_sampler_views_mask_set(
297*bbecb9d1SAndroid Build Coastguard Worker uint64_t mask[static VREND_SHADER_SAMPLER_VIEWS_MASK_LENGTH],
298*bbecb9d1SAndroid Build Coastguard Worker int index)
299*bbecb9d1SAndroid Build Coastguard Worker {
300*bbecb9d1SAndroid Build Coastguard Worker mask[index / 64] |= 1ull << (index % 64);
301*bbecb9d1SAndroid Build Coastguard Worker }
302*bbecb9d1SAndroid Build Coastguard Worker
303*bbecb9d1SAndroid Build Coastguard Worker #endif
304