2024-12-06 16:17:46 -08:00
|
|
|
/*
|
|
|
|
|
* Copyright © 2010 Intel Corporation
|
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "brw_fs.h"
|
|
|
|
|
|
2024-12-06 16:33:35 -08:00
|
|
|
/* Translates BRW IR to actual EU assembly code. */
|
|
|
|
|
class brw_generator
|
2024-12-06 16:17:46 -08:00
|
|
|
{
|
|
|
|
|
public:
|
2024-12-06 16:33:35 -08:00
|
|
|
brw_generator(const struct brw_compiler *compiler,
|
2024-12-06 16:17:46 -08:00
|
|
|
const struct brw_compile_params *params,
|
|
|
|
|
struct brw_stage_prog_data *prog_data,
|
|
|
|
|
gl_shader_stage stage);
|
2024-12-06 16:33:35 -08:00
|
|
|
~brw_generator();
|
2024-12-06 16:17:46 -08:00
|
|
|
|
|
|
|
|
void enable_debug(const char *shader_name);
|
|
|
|
|
int generate_code(const cfg_t *cfg, int dispatch_width,
|
|
|
|
|
struct brw_shader_stats shader_stats,
|
|
|
|
|
const brw::performance &perf,
|
|
|
|
|
struct brw_compile_stats *stats,
|
|
|
|
|
unsigned max_polygons = 0);
|
|
|
|
|
void add_const_data(void *data, unsigned size);
|
|
|
|
|
void add_resume_sbt(unsigned num_resume_shaders, uint64_t *sbt);
|
|
|
|
|
const unsigned *get_assembly();
|
|
|
|
|
|
|
|
|
|
private:
|
2024-12-07 00:23:07 -08:00
|
|
|
void generate_send(brw_inst *inst,
|
2024-12-06 16:17:46 -08:00
|
|
|
struct brw_reg dst,
|
|
|
|
|
struct brw_reg desc,
|
|
|
|
|
struct brw_reg ex_desc,
|
|
|
|
|
struct brw_reg payload,
|
|
|
|
|
struct brw_reg payload2);
|
2024-12-07 00:23:07 -08:00
|
|
|
void generate_barrier(brw_inst *inst, struct brw_reg src);
|
|
|
|
|
void generate_ddx(const brw_inst *inst,
|
2024-12-06 16:17:46 -08:00
|
|
|
struct brw_reg dst, struct brw_reg src);
|
2024-12-07 00:23:07 -08:00
|
|
|
void generate_ddy(const brw_inst *inst,
|
2024-12-06 16:17:46 -08:00
|
|
|
struct brw_reg dst, struct brw_reg src);
|
2024-12-07 00:23:07 -08:00
|
|
|
void generate_scratch_header(brw_inst *inst,
|
2024-12-06 16:17:46 -08:00
|
|
|
struct brw_reg dst, struct brw_reg src);
|
|
|
|
|
|
2024-12-07 00:23:07 -08:00
|
|
|
void generate_halt(brw_inst *inst);
|
2024-12-06 16:17:46 -08:00
|
|
|
|
2024-12-07 00:23:07 -08:00
|
|
|
void generate_mov_indirect(brw_inst *inst,
|
2024-12-06 16:17:46 -08:00
|
|
|
struct brw_reg dst,
|
|
|
|
|
struct brw_reg reg,
|
|
|
|
|
struct brw_reg indirect_byte_offset);
|
|
|
|
|
|
2024-12-07 00:23:07 -08:00
|
|
|
void generate_shuffle(brw_inst *inst,
|
2024-12-06 16:17:46 -08:00
|
|
|
struct brw_reg dst,
|
|
|
|
|
struct brw_reg src,
|
|
|
|
|
struct brw_reg idx);
|
|
|
|
|
|
2024-12-07 00:23:07 -08:00
|
|
|
void generate_quad_swizzle(const brw_inst *inst,
|
2024-12-06 16:17:46 -08:00
|
|
|
struct brw_reg dst, struct brw_reg src,
|
|
|
|
|
unsigned swiz);
|
|
|
|
|
|
|
|
|
|
bool patch_halt_jumps();
|
|
|
|
|
|
|
|
|
|
const struct brw_compiler *compiler;
|
|
|
|
|
const struct brw_compile_params *params;
|
|
|
|
|
|
|
|
|
|
const struct intel_device_info *devinfo;
|
|
|
|
|
|
|
|
|
|
struct brw_codegen *p;
|
|
|
|
|
struct brw_stage_prog_data * const prog_data;
|
|
|
|
|
|
|
|
|
|
unsigned dispatch_width; /**< 8, 16 or 32 */
|
|
|
|
|
|
|
|
|
|
exec_list discard_halt_patches;
|
|
|
|
|
bool debug_flag;
|
|
|
|
|
const char *shader_name;
|
|
|
|
|
gl_shader_stage stage;
|
|
|
|
|
void *mem_ctx;
|
|
|
|
|
};
|