radeonsi: fix passing address32_hi to LLVM for high values
[mesa.git] / src / amd / vulkan / radv_shader.h
index 3f8dd92392dca6ef44cc41e78f6370d895279fbd..b07f8a89e74e9e6c54e830ae2b8e6fc1c7025cd2 100644 (file)
@@ -28,6 +28,7 @@
 #ifndef RADV_SHADER_H
 #define RADV_SHADER_H
 
+#include "radv_debug.h"
 #include "radv_private.h"
 
 #include "nir/nir.h"
@@ -50,6 +51,12 @@ struct radv_shader_variant {
        unsigned rsrc1;
        unsigned rsrc2;
 
+       /* debug only */
+       uint32_t *spirv;
+       uint32_t spirv_size;
+       struct nir_shader *nir;
+       char *disasm_string;
+
        struct list_head slab_list;
 };
 
@@ -61,6 +68,9 @@ struct radv_shader_slab {
        char *ptr;
 };
 
+void
+radv_optimize_nir(struct nir_shader *shader);
+
 nir_shader *
 radv_shader_compile_to_nir(struct radv_device *device,
                           struct radv_shader_module *module,
@@ -77,10 +87,12 @@ radv_destroy_shader_slabs(struct radv_device *device);
 
 struct radv_shader_variant *
 radv_shader_variant_create(struct radv_device *device,
-                          struct nir_shader *shader,
+                          struct radv_shader_module *module,
+                          struct nir_shader *const *shaders,
+                          int shader_count,
                           struct radv_pipeline_layout *layout,
                           const struct ac_shader_variant_key *key,
-                          void ** code_out,
+                          void **code_out,
                           unsigned *code_size_out);
 
 struct radv_shader_variant *
@@ -92,11 +104,31 @@ void
 radv_shader_variant_destroy(struct radv_device *device,
                            struct radv_shader_variant *variant);
 
-uint32_t
-radv_shader_stage_to_user_data_0(gl_shader_stage stage, bool has_gs,
-                                bool has_tess);
-
 const char *
 radv_get_shader_name(struct radv_shader_variant *var, gl_shader_stage stage);
 
+void
+radv_shader_dump_stats(struct radv_device *device,
+                      struct radv_shader_variant *variant,
+                      gl_shader_stage stage,
+                      FILE *file);
+
+static inline bool
+radv_can_dump_shader(struct radv_device *device,
+                    struct radv_shader_module *module)
+{
+       /* Only dump non-meta shaders, useful for debugging purposes. */
+       return device->instance->debug_flags & RADV_DEBUG_DUMP_SHADERS &&
+              module && !module->nir;
+}
+
+static inline bool
+radv_can_dump_shader_stats(struct radv_device *device,
+                          struct radv_shader_module *module)
+{
+       /* Only dump non-meta shader stats. */
+       return device->instance->debug_flags & RADV_DEBUG_DUMP_SHADER_STATS &&
+              module && !module->nir;
+}
+
 #endif