xref: /aosp_15_r20/external/mesa3d/src/panfrost/lib/pan_shader.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright (C) 2021 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20*61046927SAndroid Build Coastguard Worker  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21*61046927SAndroid Build Coastguard Worker  * SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  *
23*61046927SAndroid Build Coastguard Worker  */
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker #ifndef __PAN_SHADER_H__
26*61046927SAndroid Build Coastguard Worker #define __PAN_SHADER_H__
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker #include "compiler/nir/nir.h"
29*61046927SAndroid Build Coastguard Worker #include "panfrost/compiler/bifrost/disassemble.h"
30*61046927SAndroid Build Coastguard Worker #include "panfrost/compiler/valhall/disassemble.h"
31*61046927SAndroid Build Coastguard Worker #include "panfrost/midgard/disassemble.h"
32*61046927SAndroid Build Coastguard Worker #include "panfrost/util/pan_ir.h"
33*61046927SAndroid Build Coastguard Worker #include "panfrost/util/pan_lower_framebuffer.h"
34*61046927SAndroid Build Coastguard Worker #include "panfrost/lib/pan_props.h"
35*61046927SAndroid Build Coastguard Worker #include "genxml/gen_macros.h"
36*61046927SAndroid Build Coastguard Worker 
37*61046927SAndroid Build Coastguard Worker void bifrost_preprocess_nir(nir_shader *nir, unsigned gpu_id);
38*61046927SAndroid Build Coastguard Worker void midgard_preprocess_nir(nir_shader *nir, unsigned gpu_id);
39*61046927SAndroid Build Coastguard Worker 
40*61046927SAndroid Build Coastguard Worker static inline void
pan_shader_preprocess(nir_shader * nir,unsigned gpu_id)41*61046927SAndroid Build Coastguard Worker pan_shader_preprocess(nir_shader *nir, unsigned gpu_id)
42*61046927SAndroid Build Coastguard Worker {
43*61046927SAndroid Build Coastguard Worker    if (pan_arch(gpu_id) >= 6)
44*61046927SAndroid Build Coastguard Worker       bifrost_preprocess_nir(nir, gpu_id);
45*61046927SAndroid Build Coastguard Worker    else
46*61046927SAndroid Build Coastguard Worker       midgard_preprocess_nir(nir, gpu_id);
47*61046927SAndroid Build Coastguard Worker }
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker static inline void
pan_shader_disassemble(FILE * fp,const void * code,size_t size,unsigned gpu_id,bool verbose)50*61046927SAndroid Build Coastguard Worker pan_shader_disassemble(FILE *fp, const void *code, size_t size, unsigned gpu_id,
51*61046927SAndroid Build Coastguard Worker                        bool verbose)
52*61046927SAndroid Build Coastguard Worker {
53*61046927SAndroid Build Coastguard Worker    if (pan_arch(gpu_id) >= 9)
54*61046927SAndroid Build Coastguard Worker       disassemble_valhall(fp, (const uint64_t *)code, size, verbose);
55*61046927SAndroid Build Coastguard Worker    else if (pan_arch(gpu_id) >= 6)
56*61046927SAndroid Build Coastguard Worker       disassemble_bifrost(fp, code, size, verbose);
57*61046927SAndroid Build Coastguard Worker    else
58*61046927SAndroid Build Coastguard Worker       disassemble_midgard(fp, code, size, gpu_id, verbose);
59*61046927SAndroid Build Coastguard Worker }
60*61046927SAndroid Build Coastguard Worker 
61*61046927SAndroid Build Coastguard Worker uint8_t pan_raw_format_mask_midgard(enum pipe_format *formats);
62*61046927SAndroid Build Coastguard Worker 
63*61046927SAndroid Build Coastguard Worker #ifdef PAN_ARCH
64*61046927SAndroid Build Coastguard Worker const nir_shader_compiler_options *GENX(pan_shader_get_compiler_options)(void);
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker void GENX(pan_shader_compile)(nir_shader *nir,
67*61046927SAndroid Build Coastguard Worker                               struct panfrost_compile_inputs *inputs,
68*61046927SAndroid Build Coastguard Worker                               struct util_dynarray *binary,
69*61046927SAndroid Build Coastguard Worker                               struct pan_shader_info *info);
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker #if PAN_ARCH >= 6 && PAN_ARCH <= 7
72*61046927SAndroid Build Coastguard Worker enum mali_register_file_format
73*61046927SAndroid Build Coastguard Worker    GENX(pan_fixup_blend_type)(nir_alu_type T_size, enum pipe_format format);
74*61046927SAndroid Build Coastguard Worker #endif
75*61046927SAndroid Build Coastguard Worker 
76*61046927SAndroid Build Coastguard Worker #if PAN_ARCH >= 9
77*61046927SAndroid Build Coastguard Worker static inline enum mali_shader_stage
pan_shader_stage(const struct pan_shader_info * info)78*61046927SAndroid Build Coastguard Worker pan_shader_stage(const struct pan_shader_info *info)
79*61046927SAndroid Build Coastguard Worker {
80*61046927SAndroid Build Coastguard Worker    switch (info->stage) {
81*61046927SAndroid Build Coastguard Worker    case MESA_SHADER_VERTEX:
82*61046927SAndroid Build Coastguard Worker       return MALI_SHADER_STAGE_VERTEX;
83*61046927SAndroid Build Coastguard Worker    case MESA_SHADER_FRAGMENT:
84*61046927SAndroid Build Coastguard Worker       return MALI_SHADER_STAGE_FRAGMENT;
85*61046927SAndroid Build Coastguard Worker    default:
86*61046927SAndroid Build Coastguard Worker       return MALI_SHADER_STAGE_COMPUTE;
87*61046927SAndroid Build Coastguard Worker    }
88*61046927SAndroid Build Coastguard Worker }
89*61046927SAndroid Build Coastguard Worker #endif
90*61046927SAndroid Build Coastguard Worker 
91*61046927SAndroid Build Coastguard Worker #if PAN_ARCH >= 7
92*61046927SAndroid Build Coastguard Worker static inline enum mali_shader_register_allocation
pan_register_allocation(unsigned work_reg_count)93*61046927SAndroid Build Coastguard Worker pan_register_allocation(unsigned work_reg_count)
94*61046927SAndroid Build Coastguard Worker {
95*61046927SAndroid Build Coastguard Worker    return (work_reg_count <= 32)
96*61046927SAndroid Build Coastguard Worker              ? MALI_SHADER_REGISTER_ALLOCATION_32_PER_THREAD
97*61046927SAndroid Build Coastguard Worker              : MALI_SHADER_REGISTER_ALLOCATION_64_PER_THREAD;
98*61046927SAndroid Build Coastguard Worker }
99*61046927SAndroid Build Coastguard Worker #endif
100*61046927SAndroid Build Coastguard Worker 
101*61046927SAndroid Build Coastguard Worker static inline enum mali_depth_source
pan_depth_source(const struct pan_shader_info * info)102*61046927SAndroid Build Coastguard Worker pan_depth_source(const struct pan_shader_info *info)
103*61046927SAndroid Build Coastguard Worker {
104*61046927SAndroid Build Coastguard Worker    return info->fs.writes_depth ? MALI_DEPTH_SOURCE_SHADER
105*61046927SAndroid Build Coastguard Worker                                 : MALI_DEPTH_SOURCE_FIXED_FUNCTION;
106*61046927SAndroid Build Coastguard Worker }
107*61046927SAndroid Build Coastguard Worker 
108*61046927SAndroid Build Coastguard Worker #if PAN_ARCH <= 7
109*61046927SAndroid Build Coastguard Worker #if PAN_ARCH <= 5
110*61046927SAndroid Build Coastguard Worker static inline void
pan_shader_prepare_midgard_rsd(const struct pan_shader_info * info,struct MALI_RENDERER_STATE * rsd)111*61046927SAndroid Build Coastguard Worker pan_shader_prepare_midgard_rsd(const struct pan_shader_info *info,
112*61046927SAndroid Build Coastguard Worker                                struct MALI_RENDERER_STATE *rsd)
113*61046927SAndroid Build Coastguard Worker {
114*61046927SAndroid Build Coastguard Worker    assert((info->push.count & 3) == 0);
115*61046927SAndroid Build Coastguard Worker 
116*61046927SAndroid Build Coastguard Worker    rsd->properties.uniform_count = info->push.count / 4;
117*61046927SAndroid Build Coastguard Worker    rsd->properties.shader_has_side_effects = info->writes_global;
118*61046927SAndroid Build Coastguard Worker    rsd->properties.fp_mode = MALI_FP_MODE_GL_INF_NAN_ALLOWED;
119*61046927SAndroid Build Coastguard Worker 
120*61046927SAndroid Build Coastguard Worker    /* For fragment shaders, work register count, early-z, reads at draw-time */
121*61046927SAndroid Build Coastguard Worker 
122*61046927SAndroid Build Coastguard Worker    if (info->stage != MESA_SHADER_FRAGMENT) {
123*61046927SAndroid Build Coastguard Worker       rsd->properties.work_register_count = info->work_reg_count;
124*61046927SAndroid Build Coastguard Worker    } else {
125*61046927SAndroid Build Coastguard Worker       rsd->properties.shader_reads_tilebuffer = info->fs.outputs_read;
126*61046927SAndroid Build Coastguard Worker 
127*61046927SAndroid Build Coastguard Worker       /* However, forcing early-z in the shader overrides draw-time */
128*61046927SAndroid Build Coastguard Worker       rsd->properties.force_early_z = info->fs.early_fragment_tests;
129*61046927SAndroid Build Coastguard Worker    }
130*61046927SAndroid Build Coastguard Worker }
131*61046927SAndroid Build Coastguard Worker 
132*61046927SAndroid Build Coastguard Worker #else
133*61046927SAndroid Build Coastguard Worker 
134*61046927SAndroid Build Coastguard Worker #define pan_preloads(reg) (preload & BITFIELD64_BIT(reg))
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker static void
pan_make_preload(gl_shader_stage stage,uint64_t preload,struct MALI_PRELOAD * out)137*61046927SAndroid Build Coastguard Worker pan_make_preload(gl_shader_stage stage, uint64_t preload,
138*61046927SAndroid Build Coastguard Worker                  struct MALI_PRELOAD *out)
139*61046927SAndroid Build Coastguard Worker {
140*61046927SAndroid Build Coastguard Worker    switch (stage) {
141*61046927SAndroid Build Coastguard Worker    case MESA_SHADER_VERTEX:
142*61046927SAndroid Build Coastguard Worker       out->vertex.position_result_address_lo = pan_preloads(58);
143*61046927SAndroid Build Coastguard Worker       out->vertex.position_result_address_hi = pan_preloads(59);
144*61046927SAndroid Build Coastguard Worker       out->vertex.vertex_id = pan_preloads(61);
145*61046927SAndroid Build Coastguard Worker       out->vertex.instance_id = pan_preloads(62);
146*61046927SAndroid Build Coastguard Worker       break;
147*61046927SAndroid Build Coastguard Worker 
148*61046927SAndroid Build Coastguard Worker    case MESA_SHADER_FRAGMENT:
149*61046927SAndroid Build Coastguard Worker       out->fragment.primitive_id = pan_preloads(57);
150*61046927SAndroid Build Coastguard Worker       out->fragment.primitive_flags = pan_preloads(58);
151*61046927SAndroid Build Coastguard Worker       out->fragment.fragment_position = pan_preloads(59);
152*61046927SAndroid Build Coastguard Worker       out->fragment.sample_mask_id = pan_preloads(61);
153*61046927SAndroid Build Coastguard Worker       out->fragment.coverage = true;
154*61046927SAndroid Build Coastguard Worker       break;
155*61046927SAndroid Build Coastguard Worker 
156*61046927SAndroid Build Coastguard Worker    default:
157*61046927SAndroid Build Coastguard Worker       out->compute.local_invocation_xy = pan_preloads(55);
158*61046927SAndroid Build Coastguard Worker       out->compute.local_invocation_z = pan_preloads(56);
159*61046927SAndroid Build Coastguard Worker       out->compute.work_group_x = pan_preloads(57);
160*61046927SAndroid Build Coastguard Worker       out->compute.work_group_y = pan_preloads(58);
161*61046927SAndroid Build Coastguard Worker       out->compute.work_group_z = pan_preloads(59);
162*61046927SAndroid Build Coastguard Worker       out->compute.global_invocation_x = pan_preloads(60);
163*61046927SAndroid Build Coastguard Worker       out->compute.global_invocation_y = pan_preloads(61);
164*61046927SAndroid Build Coastguard Worker       out->compute.global_invocation_z = pan_preloads(62);
165*61046927SAndroid Build Coastguard Worker       break;
166*61046927SAndroid Build Coastguard Worker    }
167*61046927SAndroid Build Coastguard Worker }
168*61046927SAndroid Build Coastguard Worker 
169*61046927SAndroid Build Coastguard Worker #if PAN_ARCH == 7
170*61046927SAndroid Build Coastguard Worker static inline void
pan_pack_message_preload(struct MALI_MESSAGE_PRELOAD * cfg,const struct bifrost_message_preload * msg)171*61046927SAndroid Build Coastguard Worker pan_pack_message_preload(struct MALI_MESSAGE_PRELOAD *cfg,
172*61046927SAndroid Build Coastguard Worker                          const struct bifrost_message_preload *msg)
173*61046927SAndroid Build Coastguard Worker {
174*61046927SAndroid Build Coastguard Worker    enum mali_message_preload_register_format regfmt =
175*61046927SAndroid Build Coastguard Worker       msg->fp16 ? MALI_MESSAGE_PRELOAD_REGISTER_FORMAT_F16
176*61046927SAndroid Build Coastguard Worker                 : MALI_MESSAGE_PRELOAD_REGISTER_FORMAT_F32;
177*61046927SAndroid Build Coastguard Worker 
178*61046927SAndroid Build Coastguard Worker    if (msg->enabled && msg->texture) {
179*61046927SAndroid Build Coastguard Worker       cfg->type = MALI_MESSAGE_TYPE_VAR_TEX;
180*61046927SAndroid Build Coastguard Worker       cfg->var_tex.varying_index = msg->varying_index;
181*61046927SAndroid Build Coastguard Worker       cfg->var_tex.texture_index = msg->texture_index;
182*61046927SAndroid Build Coastguard Worker       cfg->var_tex.register_format = regfmt;
183*61046927SAndroid Build Coastguard Worker       cfg->var_tex.skip = msg->skip;
184*61046927SAndroid Build Coastguard Worker       cfg->var_tex.zero_lod = msg->zero_lod;
185*61046927SAndroid Build Coastguard Worker    } else if (msg->enabled) {
186*61046927SAndroid Build Coastguard Worker       cfg->type = MALI_MESSAGE_TYPE_LD_VAR;
187*61046927SAndroid Build Coastguard Worker       cfg->ld_var.varying_index = msg->varying_index;
188*61046927SAndroid Build Coastguard Worker       cfg->ld_var.register_format = regfmt;
189*61046927SAndroid Build Coastguard Worker       cfg->ld_var.num_components = msg->num_components;
190*61046927SAndroid Build Coastguard Worker    } else {
191*61046927SAndroid Build Coastguard Worker       cfg->type = MALI_MESSAGE_TYPE_DISABLED;
192*61046927SAndroid Build Coastguard Worker    }
193*61046927SAndroid Build Coastguard Worker }
194*61046927SAndroid Build Coastguard Worker #endif
195*61046927SAndroid Build Coastguard Worker 
196*61046927SAndroid Build Coastguard Worker static inline void
pan_shader_prepare_bifrost_rsd(const struct pan_shader_info * info,struct MALI_RENDERER_STATE * rsd)197*61046927SAndroid Build Coastguard Worker pan_shader_prepare_bifrost_rsd(const struct pan_shader_info *info,
198*61046927SAndroid Build Coastguard Worker                                struct MALI_RENDERER_STATE *rsd)
199*61046927SAndroid Build Coastguard Worker {
200*61046927SAndroid Build Coastguard Worker    unsigned fau_count = DIV_ROUND_UP(info->push.count, 2);
201*61046927SAndroid Build Coastguard Worker    rsd->preload.uniform_count = fau_count;
202*61046927SAndroid Build Coastguard Worker 
203*61046927SAndroid Build Coastguard Worker #if PAN_ARCH >= 7
204*61046927SAndroid Build Coastguard Worker    rsd->properties.shader_register_allocation =
205*61046927SAndroid Build Coastguard Worker       pan_register_allocation(info->work_reg_count);
206*61046927SAndroid Build Coastguard Worker #endif
207*61046927SAndroid Build Coastguard Worker 
208*61046927SAndroid Build Coastguard Worker    pan_make_preload(info->stage, info->preload, &rsd->preload);
209*61046927SAndroid Build Coastguard Worker 
210*61046927SAndroid Build Coastguard Worker    if (info->stage == MESA_SHADER_FRAGMENT) {
211*61046927SAndroid Build Coastguard Worker       rsd->properties.shader_modifies_coverage =
212*61046927SAndroid Build Coastguard Worker          info->fs.writes_coverage || info->fs.can_discard;
213*61046927SAndroid Build Coastguard Worker 
214*61046927SAndroid Build Coastguard Worker       rsd->properties.allow_forward_pixel_to_be_killed = !info->writes_global;
215*61046927SAndroid Build Coastguard Worker 
216*61046927SAndroid Build Coastguard Worker #if PAN_ARCH >= 7
217*61046927SAndroid Build Coastguard Worker       rsd->properties.shader_wait_dependency_6 = info->bifrost.wait_6;
218*61046927SAndroid Build Coastguard Worker       rsd->properties.shader_wait_dependency_7 = info->bifrost.wait_7;
219*61046927SAndroid Build Coastguard Worker 
220*61046927SAndroid Build Coastguard Worker       pan_pack_message_preload(&rsd->message_preload_1,
221*61046927SAndroid Build Coastguard Worker                                &info->bifrost.messages[0]);
222*61046927SAndroid Build Coastguard Worker       pan_pack_message_preload(&rsd->message_preload_2,
223*61046927SAndroid Build Coastguard Worker                                &info->bifrost.messages[1]);
224*61046927SAndroid Build Coastguard Worker #endif
225*61046927SAndroid Build Coastguard Worker    } else if (info->stage == MESA_SHADER_VERTEX && info->vs.secondary_enable) {
226*61046927SAndroid Build Coastguard Worker       rsd->secondary_preload.uniform_count = fau_count;
227*61046927SAndroid Build Coastguard Worker 
228*61046927SAndroid Build Coastguard Worker       pan_make_preload(info->stage, info->vs.secondary_preload,
229*61046927SAndroid Build Coastguard Worker                        &rsd->secondary_preload);
230*61046927SAndroid Build Coastguard Worker 
231*61046927SAndroid Build Coastguard Worker       rsd->secondary_shader = rsd->shader.shader + info->vs.secondary_offset;
232*61046927SAndroid Build Coastguard Worker 
233*61046927SAndroid Build Coastguard Worker #if PAN_ARCH >= 7
234*61046927SAndroid Build Coastguard Worker       rsd->properties.secondary_shader_register_allocation =
235*61046927SAndroid Build Coastguard Worker          pan_register_allocation(info->vs.secondary_work_reg_count);
236*61046927SAndroid Build Coastguard Worker #endif
237*61046927SAndroid Build Coastguard Worker    }
238*61046927SAndroid Build Coastguard Worker }
239*61046927SAndroid Build Coastguard Worker 
240*61046927SAndroid Build Coastguard Worker #endif
241*61046927SAndroid Build Coastguard Worker 
242*61046927SAndroid Build Coastguard Worker static inline void
pan_shader_prepare_rsd(const struct pan_shader_info * shader_info,mali_ptr shader_ptr,struct MALI_RENDERER_STATE * rsd)243*61046927SAndroid Build Coastguard Worker pan_shader_prepare_rsd(const struct pan_shader_info *shader_info,
244*61046927SAndroid Build Coastguard Worker                        mali_ptr shader_ptr, struct MALI_RENDERER_STATE *rsd)
245*61046927SAndroid Build Coastguard Worker {
246*61046927SAndroid Build Coastguard Worker #if PAN_ARCH <= 5
247*61046927SAndroid Build Coastguard Worker    shader_ptr |= shader_info->midgard.first_tag;
248*61046927SAndroid Build Coastguard Worker #endif
249*61046927SAndroid Build Coastguard Worker 
250*61046927SAndroid Build Coastguard Worker    rsd->shader.shader = shader_ptr;
251*61046927SAndroid Build Coastguard Worker    rsd->shader.attribute_count = shader_info->attribute_count;
252*61046927SAndroid Build Coastguard Worker    rsd->shader.varying_count =
253*61046927SAndroid Build Coastguard Worker       shader_info->varyings.input_count + shader_info->varyings.output_count;
254*61046927SAndroid Build Coastguard Worker    rsd->shader.texture_count = shader_info->texture_count;
255*61046927SAndroid Build Coastguard Worker    rsd->shader.sampler_count = shader_info->sampler_count;
256*61046927SAndroid Build Coastguard Worker    rsd->properties.shader_contains_barrier = shader_info->contains_barrier;
257*61046927SAndroid Build Coastguard Worker    rsd->properties.uniform_buffer_count = shader_info->ubo_count;
258*61046927SAndroid Build Coastguard Worker 
259*61046927SAndroid Build Coastguard Worker    if (shader_info->stage == MESA_SHADER_FRAGMENT) {
260*61046927SAndroid Build Coastguard Worker       rsd->properties.stencil_from_shader = shader_info->fs.writes_stencil;
261*61046927SAndroid Build Coastguard Worker       rsd->properties.depth_source = pan_depth_source(shader_info);
262*61046927SAndroid Build Coastguard Worker 
263*61046927SAndroid Build Coastguard Worker       /* This also needs to be set if the API forces per-sample
264*61046927SAndroid Build Coastguard Worker        * shading, but that'll just got ORed in */
265*61046927SAndroid Build Coastguard Worker       rsd->multisample_misc.evaluate_per_sample =
266*61046927SAndroid Build Coastguard Worker          shader_info->fs.sample_shading;
267*61046927SAndroid Build Coastguard Worker    }
268*61046927SAndroid Build Coastguard Worker 
269*61046927SAndroid Build Coastguard Worker #if PAN_ARCH >= 6
270*61046927SAndroid Build Coastguard Worker    pan_shader_prepare_bifrost_rsd(shader_info, rsd);
271*61046927SAndroid Build Coastguard Worker #else
272*61046927SAndroid Build Coastguard Worker    pan_shader_prepare_midgard_rsd(shader_info, rsd);
273*61046927SAndroid Build Coastguard Worker #endif
274*61046927SAndroid Build Coastguard Worker }
275*61046927SAndroid Build Coastguard Worker #endif /* PAN_ARCH */
276*61046927SAndroid Build Coastguard Worker #endif
277*61046927SAndroid Build Coastguard Worker 
278*61046927SAndroid Build Coastguard Worker #endif
279