Commit bc62673d authored by Lionel Landwerlin's avatar Lionel Landwerlin

anv: write spirv-nir logs back to the application

Using the existing VK_EXT_debug_report extension.
Signed-off-by: Lionel Landwerlin's avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand's avatarJason Ekstrand <jason@jlekstrand.net>
parent 53a7649e
...@@ -95,6 +95,33 @@ static const uint64_t stage_to_debug[] = { ...@@ -95,6 +95,33 @@ static const uint64_t stage_to_debug[] = {
[MESA_SHADER_COMPUTE] = DEBUG_CS, [MESA_SHADER_COMPUTE] = DEBUG_CS,
}; };
struct anv_spirv_debug_data {
struct anv_device *device;
const struct anv_shader_module *module;
};
static void anv_spirv_nir_debug(void *private_data,
enum nir_spirv_debug_level level,
size_t spirv_offset,
const char *message)
{
struct anv_spirv_debug_data *debug_data = private_data;
static const VkDebugReportFlagsEXT vk_flags[] = {
[NIR_SPIRV_DEBUG_LEVEL_INFO] = VK_DEBUG_REPORT_INFORMATION_BIT_EXT,
[NIR_SPIRV_DEBUG_LEVEL_WARNING] = VK_DEBUG_REPORT_WARNING_BIT_EXT,
[NIR_SPIRV_DEBUG_LEVEL_ERROR] = VK_DEBUG_REPORT_ERROR_BIT_EXT,
};
char buffer[256];
snprintf(buffer, sizeof(buffer), "SPIR-V offset %lu: %s", spirv_offset, message);
vk_debug_report(&debug_data->device->instance->debug_report_callbacks,
vk_flags[level],
VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
(uint64_t) (uintptr_t) debug_data->module,
0, 0, "anv", buffer);
}
/* Eventually, this will become part of anv_CreateShader. Unfortunately, /* Eventually, this will become part of anv_CreateShader. Unfortunately,
* we can't do that yet because we don't have the ability to copy nir. * we can't do that yet because we don't have the ability to copy nir.
*/ */
...@@ -134,6 +161,10 @@ anv_shader_compile_to_nir(struct anv_device *device, ...@@ -134,6 +161,10 @@ anv_shader_compile_to_nir(struct anv_device *device,
} }
} }
struct anv_spirv_debug_data spirv_debug_data = {
.device = device,
.module = module,
};
struct spirv_to_nir_options spirv_options = { struct spirv_to_nir_options spirv_options = {
.lower_workgroup_access_to_offsets = true, .lower_workgroup_access_to_offsets = true,
.caps = { .caps = {
...@@ -183,6 +214,10 @@ anv_shader_compile_to_nir(struct anv_device *device, ...@@ -183,6 +214,10 @@ anv_shader_compile_to_nir(struct anv_device *device,
* with certain code / code generators. * with certain code / code generators.
*/ */
.shared_addr_format = nir_address_format_32bit_offset, .shared_addr_format = nir_address_format_32bit_offset,
.debug = {
.func = anv_spirv_nir_debug,
.private_data = &spirv_debug_data,
},
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment