~mmach/netext73/mesa-ryzen

« back to all changes in this revision

Viewing changes to src/amd/compiler/tests/helpers.h

  • Committer: mmach
  • Date: 2023-11-02 21:31:35 UTC
  • Revision ID: netbit73@gmail.com-20231102213135-18d4tzh7tj0uz752
2023-11-02 22:11:57

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#ifndef ACO_TEST_HELPERS_H
25
25
#define ACO_TEST_HELPERS_H
26
26
 
 
27
#include "vulkan/vulkan.h"
 
28
 
27
29
#include "framework.h"
28
 
#include "vulkan/vulkan.h"
29
30
#include <functional>
30
31
 
31
32
enum QoShaderDeclType {
42
43
};
43
44
 
44
45
struct QoShaderDecl {
45
 
   const char *name;
46
 
   const char *type;
 
46
   const char* name;
 
47
   const char* type;
47
48
   QoShaderDeclType decl_type;
48
 
   //TODO: array size?
 
49
   // TODO: array size?
49
50
   unsigned location;
50
51
   unsigned component;
51
52
   unsigned binding;
53
54
};
54
55
 
55
56
struct QoShaderModuleCreateInfo {
56
 
    void *pNext;
57
 
    size_t spirvSize;
58
 
    const void *pSpirv;
59
 
    uint32_t declarationCount;
60
 
    const QoShaderDecl *pDeclarations;
61
 
    VkShaderStageFlagBits stage;
 
57
   void* pNext;
 
58
   size_t spirvSize;
 
59
   const void* pSpirv;
 
60
   uint32_t declarationCount;
 
61
   const QoShaderDecl* pDeclarations;
 
62
   VkShaderStageFlagBits stage;
62
63
};
63
64
 
64
65
extern ac_shader_config config;
71
72
struct ra_test_policy;
72
73
}
73
74
 
74
 
void create_program(enum amd_gfx_level gfx_level, aco::Stage stage,
75
 
                    unsigned wave_size=64, enum radeon_family family=CHIP_UNKNOWN);
76
 
bool setup_cs(const char *input_spec, enum amd_gfx_level gfx_level,
77
 
              enum radeon_family family=CHIP_UNKNOWN, const char* subvariant = "",
78
 
              unsigned wave_size=64);
 
75
void create_program(enum amd_gfx_level gfx_level, aco::Stage stage, unsigned wave_size = 64,
 
76
                    enum radeon_family family = CHIP_UNKNOWN);
 
77
bool setup_cs(const char* input_spec, enum amd_gfx_level gfx_level,
 
78
              enum radeon_family family = CHIP_UNKNOWN, const char* subvariant = "",
 
79
              unsigned wave_size = 64);
79
80
 
80
 
void finish_program(aco::Program *program);
 
81
void finish_program(aco::Program* program);
81
82
void finish_validator_test();
82
83
void finish_opt_test();
83
84
void finish_setup_reduce_temp_test();
84
 
void finish_ra_test(aco::ra_test_policy, bool lower=false);
 
85
void finish_ra_test(aco::ra_test_policy, bool lower = false);
85
86
void finish_optimizer_postRA_test();
86
87
void finish_to_hw_instr_test();
87
88
void finish_waitcnt_test();
89
90
void finish_form_hard_clause_test();
90
91
void finish_assembler_test();
91
92
 
92
 
void writeout(unsigned i, aco::Temp tmp=aco::Temp(0, aco::s1));
 
93
void writeout(unsigned i, aco::Temp tmp = aco::Temp(0, aco::s1));
93
94
void writeout(unsigned i, aco::Builder::Result res);
94
95
void writeout(unsigned i, aco::Operand op);
95
96
void writeout(unsigned i, aco::Operand op0, aco::Operand op1);
96
97
 
97
 
aco::Temp fneg(aco::Temp src, aco::Builder b=bld);
98
 
aco::Temp fabs(aco::Temp src, aco::Builder b=bld);
99
 
aco::Temp f2f32(aco::Temp src, aco::Builder b=bld);
100
 
aco::Temp f2f16(aco::Temp src, aco::Builder b=bld);
101
 
aco::Temp u2u16(aco::Temp src, aco::Builder b=bld);
102
 
aco::Temp fadd(aco::Temp src0, aco::Temp src1, aco::Builder b=bld);
103
 
aco::Temp fmul(aco::Temp src0, aco::Temp src1, aco::Builder b=bld);
104
 
aco::Temp fma(aco::Temp src0, aco::Temp src1, aco::Temp src2, aco::Builder b=bld);
105
 
aco::Temp fsat(aco::Temp src, aco::Builder b=bld);
106
 
aco::Temp fmin(aco::Temp src0, aco::Temp src1, aco::Builder b=bld);
107
 
aco::Temp fmax(aco::Temp src0, aco::Temp src1, aco::Builder b=bld);
108
 
aco::Temp ext_ushort(aco::Temp src, unsigned idx, aco::Builder b=bld);
109
 
aco::Temp ext_ubyte(aco::Temp src, unsigned idx, aco::Builder b=bld);
110
 
void emit_divergent_if_else(aco::Program* prog, aco::Builder& b, aco::Operand cond, std::function<void()> then,
111
 
                            std::function<void()> els);
 
98
aco::Temp fneg(aco::Temp src, aco::Builder b = bld);
 
99
aco::Temp fabs(aco::Temp src, aco::Builder b = bld);
 
100
aco::Temp f2f32(aco::Temp src, aco::Builder b = bld);
 
101
aco::Temp f2f16(aco::Temp src, aco::Builder b = bld);
 
102
aco::Temp u2u16(aco::Temp src, aco::Builder b = bld);
 
103
aco::Temp fadd(aco::Temp src0, aco::Temp src1, aco::Builder b = bld);
 
104
aco::Temp fmul(aco::Temp src0, aco::Temp src1, aco::Builder b = bld);
 
105
aco::Temp fma(aco::Temp src0, aco::Temp src1, aco::Temp src2, aco::Builder b = bld);
 
106
aco::Temp fsat(aco::Temp src, aco::Builder b = bld);
 
107
aco::Temp fmin(aco::Temp src0, aco::Temp src1, aco::Builder b = bld);
 
108
aco::Temp fmax(aco::Temp src0, aco::Temp src1, aco::Builder b = bld);
 
109
aco::Temp ext_ushort(aco::Temp src, unsigned idx, aco::Builder b = bld);
 
110
aco::Temp ext_ubyte(aco::Temp src, unsigned idx, aco::Builder b = bld);
 
111
void emit_divergent_if_else(aco::Program* prog, aco::Builder& b, aco::Operand cond,
 
112
                            std::function<void()> then, std::function<void()> els);
112
113
 
113
114
/* vulkan helpers */
114
115
VkDevice get_vk_device(enum amd_gfx_level gfx_level);
115
116
VkDevice get_vk_device(enum radeon_family family);
116
117
 
117
118
void print_pipeline_ir(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits stages,
118
 
                       const char *name, bool remove_encoding=false);
 
119
                       const char* name, bool remove_encoding = false);
119
120
 
120
 
VkShaderModule __qoCreateShaderModule(VkDevice dev, const QoShaderModuleCreateInfo *info);
 
121
VkShaderModule __qoCreateShaderModule(VkDevice dev, const QoShaderModuleCreateInfo* info);
121
122
 
122
123
class PipelineBuilder {
123
124
public:
152
153
   ~PipelineBuilder();
153
154
 
154
155
   PipelineBuilder(const PipelineBuilder&) = delete;
155
 
   PipelineBuilder& operator = (const PipelineBuilder&) = delete;
156
 
 
157
 
   void add_desc_binding(VkShaderStageFlags stage_flags, uint32_t layout,
158
 
                         uint32_t binding, VkDescriptorType type, uint32_t count=1);
159
 
 
160
 
   void add_vertex_binding(uint32_t binding, uint32_t stride, VkVertexInputRate rate=VK_VERTEX_INPUT_RATE_VERTEX);
 
156
   PipelineBuilder& operator=(const PipelineBuilder&) = delete;
 
157
 
 
158
   void add_desc_binding(VkShaderStageFlags stage_flags, uint32_t layout, uint32_t binding,
 
159
                         VkDescriptorType type, uint32_t count = 1);
 
160
 
 
161
   void add_vertex_binding(uint32_t binding, uint32_t stride,
 
162
                           VkVertexInputRate rate = VK_VERTEX_INPUT_RATE_VERTEX);
161
163
   void add_vertex_attribute(uint32_t location, uint32_t binding, VkFormat format, uint32_t offset);
162
164
 
163
 
   void add_resource_decls(QoShaderModuleCreateInfo *module);
164
 
   void add_io_decls(QoShaderModuleCreateInfo *module);
 
165
   void add_resource_decls(QoShaderModuleCreateInfo* module);
 
166
   void add_io_decls(QoShaderModuleCreateInfo* module);
165
167
 
166
 
   void add_stage(VkShaderStageFlagBits stage, VkShaderModule module, const char *name="main");
167
 
   void add_stage(VkShaderStageFlagBits stage, QoShaderModuleCreateInfo module, const char *name="main");
 
168
   void add_stage(VkShaderStageFlagBits stage, VkShaderModule module, const char* name = "main");
 
169
   void add_stage(VkShaderStageFlagBits stage, QoShaderModuleCreateInfo module,
 
170
                  const char* name = "main");
168
171
   void add_vsfs(VkShaderModule vs, VkShaderModule fs);
169
172
   void add_vsfs(QoShaderModuleCreateInfo vs, QoShaderModuleCreateInfo fs);
170
173
   void add_cs(VkShaderModule cs);
174
177
 
175
178
   void create_pipeline();
176
179
 
177
 
   void print_ir(VkShaderStageFlagBits stages, const char *name, bool remove_encoding=false);
 
180
   void print_ir(VkShaderStageFlagBits stages, const char* name, bool remove_encoding = false);
 
181
 
178
182
private:
179
183
   void create_compute_pipeline();
180
184
   void create_graphics_pipeline();