• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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