1 /* 2 * Copyright © 2010 Intel Corporation 3 * SPDX-License-Identifier: MIT 4 */ 5 6 #pragma once 7 8 #include "brw_fs.h" 9 10 /* Translates BRW IR to actual EU assembly code. */ 11 class brw_generator 12 { 13 public: 14 brw_generator(const struct brw_compiler *compiler, 15 const struct brw_compile_params *params, 16 struct brw_stage_prog_data *prog_data, 17 gl_shader_stage stage); 18 ~brw_generator(); 19 20 void enable_debug(const char *shader_name); 21 int generate_code(const cfg_t *cfg, int dispatch_width, 22 struct brw_shader_stats shader_stats, 23 const brw::performance &perf, 24 struct brw_compile_stats *stats, 25 unsigned max_polygons = 0); 26 void add_const_data(void *data, unsigned size); 27 void add_resume_sbt(unsigned num_resume_shaders, uint64_t *sbt); 28 const unsigned *get_assembly(); 29 30 private: 31 void generate_send(fs_inst *inst, 32 struct brw_reg dst, 33 struct brw_reg desc, 34 struct brw_reg ex_desc, 35 struct brw_reg payload, 36 struct brw_reg payload2); 37 void generate_barrier(fs_inst *inst, struct brw_reg src); 38 void generate_ddx(const fs_inst *inst, 39 struct brw_reg dst, struct brw_reg src); 40 void generate_ddy(const fs_inst *inst, 41 struct brw_reg dst, struct brw_reg src); 42 void generate_scratch_header(fs_inst *inst, 43 struct brw_reg dst, struct brw_reg src); 44 45 void generate_halt(fs_inst *inst); 46 47 void generate_mov_indirect(fs_inst *inst, 48 struct brw_reg dst, 49 struct brw_reg reg, 50 struct brw_reg indirect_byte_offset); 51 52 void generate_shuffle(fs_inst *inst, 53 struct brw_reg dst, 54 struct brw_reg src, 55 struct brw_reg idx); 56 57 void generate_quad_swizzle(const fs_inst *inst, 58 struct brw_reg dst, struct brw_reg src, 59 unsigned swiz); 60 61 bool patch_halt_jumps(); 62 63 const struct brw_compiler *compiler; 64 const struct brw_compile_params *params; 65 66 const struct intel_device_info *devinfo; 67 68 struct brw_codegen *p; 69 struct brw_stage_prog_data * const prog_data; 70 71 unsigned dispatch_width; /**< 8, 16 or 32 */ 72 73 exec_list discard_halt_patches; 74 bool debug_flag; 75 const char *shader_name; 76 gl_shader_stage stage; 77 void *mem_ctx; 78 }; 79