• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2010 Tom Stellard <tstellar@gmail.com>
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #include "radeon_program_constants.h"
7 
8 #ifndef RADEON_PROGRAM_UTIL_H
9 #define RADEON_PROGRAM_UTIL_H
10 
11 #include <stdbool.h>
12 
13 #include "radeon_opcodes.h"
14 
15 struct radeon_compiler;
16 struct rc_instruction;
17 struct rc_pair_instruction;
18 struct rc_pair_sub_instruction;
19 struct rc_src_register;
20 
21 unsigned int rc_swizzle_to_writemask(unsigned int swz);
22 
23 rc_swizzle get_swz(unsigned int swz, rc_swizzle idx);
24 
25 unsigned int rc_init_swizzle(unsigned int initial_value, unsigned int channels);
26 
27 unsigned int combine_swizzles4(unsigned int src, rc_swizzle swz_x, rc_swizzle swz_y,
28                                rc_swizzle swz_z, rc_swizzle swz_w);
29 
30 unsigned int combine_swizzles(unsigned int src, unsigned int swz);
31 
32 rc_swizzle rc_mask_to_swizzle(unsigned int mask);
33 
34 unsigned swizzle_mask(unsigned swizzle, unsigned mask);
35 
36 unsigned int rc_adjust_channels(unsigned int old_swizzle, unsigned int conversion_swizzle);
37 
38 void rc_pair_rewrite_writemask(struct rc_pair_sub_instruction *sub,
39                                unsigned int conversion_swizzle);
40 
41 void rc_normal_rewrite_writemask(struct rc_instruction *inst, unsigned int conversion_swizzle);
42 
43 unsigned int rc_rewrite_swizzle(unsigned int swizzle, unsigned int new_mask);
44 
45 struct rc_src_register lmul_swizzle(unsigned int swizzle, struct rc_src_register srcreg);
46 
47 void reset_srcreg(struct rc_src_register *reg);
48 
49 unsigned int rc_src_reads_dst_mask(rc_register_file src_file, unsigned int src_idx,
50                                    unsigned int src_swz, rc_register_file dst_file,
51                                    unsigned int dst_idx, unsigned int dst_mask);
52 
53 unsigned int rc_source_type_swz(unsigned int swizzle);
54 
55 unsigned int rc_source_type_mask(unsigned int mask);
56 
57 unsigned int rc_inst_can_use_presub(struct radeon_compiler *c, struct rc_instruction *inst,
58                                     rc_presubtract_op presub_op, unsigned int presub_writemask,
59                                     const struct rc_src_register *replace_reg,
60                                     const struct rc_src_register *presub_src0,
61                                     const struct rc_src_register *presub_src1);
62 
63 int rc_get_max_index(struct radeon_compiler *c, rc_register_file file);
64 
65 void rc_pair_remove_src(struct rc_instruction *inst, unsigned int src_type, unsigned int source);
66 
67 rc_opcode rc_get_flow_control_inst(struct rc_instruction *inst);
68 
69 struct rc_instruction *rc_match_endloop(struct rc_instruction *endloop);
70 struct rc_instruction *rc_match_bgnloop(struct rc_instruction *bgnloop);
71 
72 unsigned int rc_make_conversion_swizzle(unsigned int old_mask, unsigned int new_mask);
73 
74 unsigned int rc_src_reg_is_immediate(struct radeon_compiler *c, unsigned int file,
75                                      unsigned int index);
76 
77 float rc_get_constant_value(struct radeon_compiler *c, unsigned int index, unsigned int swizzle,
78                             unsigned int negate, unsigned int chan);
79 
80 unsigned int rc_get_scalar_src_swz(unsigned int swizzle);
81 
82 bool rc_inst_has_three_diff_temp_srcs(struct rc_instruction *inst);
83 
84 float rc_inline_to_float(int index);
85 #endif /* RADEON_PROGRAM_UTIL_H */
86