radv,aco: report ACO errors/warnings back via VK_EXT_debug_report
[mesa.git] / src / amd / compiler / aco_ir.h
index 9dda1ffb723d8fb7a06466628ff05dfbe6d5db3b..0b3a7767a3c3b851c0d9ded61d5da9b616ef5f24 100644 (file)
@@ -37,6 +37,8 @@
 #include "aco_opcodes.h"
 #include "aco_util.h"
 
+#include "vulkan/radv_shader.h"
+
 struct radv_nir_compiler_options;
 struct radv_shader_args;
 struct radv_shader_info;
@@ -46,7 +48,7 @@ namespace aco {
 extern uint64_t debug_flags;
 
 enum {
-   DEBUG_VALIDATE = 0x1,
+   DEBUG_VALIDATE_IR = 0x1,
    DEBUG_VALIDATE_RA = 0x2,
    DEBUG_PERFWARN = 0x4,
 };
@@ -174,7 +176,7 @@ struct memory_sync_info {
       return (!storage || (semantics & semantic_can_reorder)) && !(semantics & semantic_volatile);
    }
 };
-static_assert(sizeof(memory_sync_info) == 3);
+static_assert(sizeof(memory_sync_info) == 3, "Unexpected padding");
 
 enum fp_round {
    fp_round_ne = 0,
@@ -1580,6 +1582,13 @@ public:
    bool collect_statistics = false;
    uint32_t statistics[num_statistics];
 
+   struct {
+      void (*func)(void *private_data,
+                   enum radv_compiler_debug_level level,
+                   const char *message);
+      void *private_data;
+   } debug;
+
    uint32_t allocateId()
    {
       assert(allocationID <= 16777215);
@@ -1665,10 +1674,10 @@ void insert_NOPs(Program* program);
 unsigned emit_program(Program* program, std::vector<uint32_t>& code);
 void print_asm(Program *program, std::vector<uint32_t>& binary,
                unsigned exec_size, std::ostream& out);
-bool validate(Program* program, FILE *output);
-bool validate_ra(Program* program, const struct radv_nir_compiler_options *options, FILE *output);
+bool validate_ir(Program* program);
+bool validate_ra(Program* program, const struct radv_nir_compiler_options *options);
 #ifndef NDEBUG
-void perfwarn(bool cond, const char *msg, Instruction *instr=NULL);
+void perfwarn(Program *program, bool cond, const char *msg, Instruction *instr=NULL);
 #else
 #define perfwarn(program, cond, msg, ...) do {} while(0)
 #endif
@@ -1680,6 +1689,14 @@ void collect_postasm_stats(Program *program, const std::vector<uint32_t>& code);
 void aco_print_instr(const Instruction *instr, FILE *output);
 void aco_print_program(const Program *program, FILE *output);
 
+void _aco_perfwarn(Program *program, const char *file, unsigned line,
+                   const char *fmt, ...);
+void _aco_err(Program *program, const char *file, unsigned line,
+              const char *fmt, ...);
+
+#define aco_perfwarn(program, ...) _aco_perfwarn(program, __FILE__, __LINE__, __VA_ARGS__)
+#define aco_err(program, ...) _aco_err(program, __FILE__, __LINE__, __VA_ARGS__)
+
 /* utilities for dealing with register demand */
 RegisterDemand get_live_changes(aco_ptr<Instruction>& instr);
 RegisterDemand get_temp_registers(aco_ptr<Instruction>& instr);