device->trace_bo = ws->buffer_create(ws, TRACE_BO_SIZE, 8,
RADEON_DOMAIN_VRAM,
RADEON_FLAG_CPU_ACCESS|
- RADEON_FLAG_NO_INTERPROCESS_SHARING,
+ RADEON_FLAG_NO_INTERPROCESS_SHARING |
+ RADEON_FLAG_ZERO_VRAM,
RADV_BO_PRIORITY_UPLOAD_BUFFER);
if (!device->trace_bo)
return false;
if (!device->trace_id_ptr)
return false;
- memset(device->trace_id_ptr, 0, TRACE_BO_SIZE);
-
ac_vm_fault_occured(device->physical_device->rad_info.chip_class,
&device->dmesg_timestamp, NULL);
}
static void
-radv_dump_descriptor_set(enum chip_class chip_class,
+radv_dump_descriptor_set(struct radv_device *device,
struct radv_descriptor_set *set, unsigned id, FILE *f)
{
+ enum chip_class chip_class = device->physical_device->rad_info.chip_class;
const struct radv_descriptor_set_layout *layout;
int i;
}
static void
-radv_dump_descriptors(struct radv_pipeline *pipeline, FILE *f)
+radv_dump_descriptors(struct radv_device *device, FILE *f)
{
- struct radv_device *device = pipeline->device;
- enum chip_class chip_class = device->physical_device->rad_info.chip_class;
uint64_t *ptr = (uint64_t *)device->trace_id_ptr;
int i;
fprintf(f, "Descriptors:\n");
for (i = 0; i < MAX_SETS; i++) {
struct radv_descriptor_set *set =
- (struct radv_descriptor_set *)ptr[i + 3];
+ *(struct radv_descriptor_set **)(ptr + i + 3);
- radv_dump_descriptor_set(chip_class, set, i, f);
+ radv_dump_descriptor_set(device, set, i, f);
}
}
fprintf(f, "NIR:\n%s\n", shader->nir_string);
}
- fprintf(f, "LLVM IR:\n%s\n", shader->ir_string);
+ fprintf(f, "%s IR:\n%s\n",
+ pipeline->device->physical_device->use_aco ? "ACO" : "LLVM",
+ shader->ir_string);
fprintf(f, "DISASM:\n%s\n", shader->disasm_string);
radv_shader_dump_stats(pipeline->device, shader, stage, f);
{
radv_dump_shaders(pipeline, active_stages, f);
radv_dump_annotated_shaders(pipeline, active_stages, f);
- radv_dump_descriptors(pipeline, f);
}
static void
-radv_dump_graphics_state(struct radv_pipeline *graphics_pipeline,
+radv_dump_graphics_state(struct radv_device *device,
+ struct radv_pipeline *graphics_pipeline,
struct radv_pipeline *compute_pipeline, FILE *f)
{
VkShaderStageFlagBits active_stages;
active_stages = VK_SHADER_STAGE_COMPUTE_BIT;
radv_dump_pipeline_state(compute_pipeline, active_stages, f);
}
+
+ radv_dump_descriptors(device, f);
}
static void
-radv_dump_compute_state(struct radv_pipeline *compute_pipeline, FILE *f)
+radv_dump_compute_state(struct radv_device *device,
+ struct radv_pipeline *compute_pipeline, FILE *f)
{
VkShaderStageFlagBits active_stages = VK_SHADER_STAGE_COMPUTE_BIT;
return;
radv_dump_pipeline_state(compute_pipeline, active_stages, f);
+ radv_dump_descriptors(device, f);
}
static struct radv_pipeline *
{
uint64_t *ptr = (uint64_t *)device->trace_id_ptr;
- return (struct radv_pipeline *)ptr[1];
+ return *(struct radv_pipeline **)(ptr + 1);
}
static struct radv_pipeline *
{
uint64_t *ptr = (uint64_t *)device->trace_id_ptr;
- return (struct radv_pipeline *)ptr[2];
+ return *(struct radv_pipeline **)(ptr + 2);
}
static void
snprintf(kernel_version, sizeof(kernel_version),
" / %s", uname_data.release);
- fprintf(f, "Device name: %s (%s DRM %i.%i.%i%s, LLVM "
- MESA_LLVM_VERSION_STRING ")\n\n",
+ fprintf(f, "Device name: %s (%s / DRM %i.%i.%i%s)\n\n",
chip_name, device->physical_device->name,
info->drm_major, info->drm_minor, info->drm_patchlevel,
kernel_version);
graphics_pipeline = radv_get_saved_graphics_pipeline(device);
compute_pipeline = radv_get_saved_compute_pipeline(device);
+ radv_dump_trace(queue->device, cs);
+
fprintf(stderr, "GPU hang report:\n\n");
radv_dump_device_name(device, stderr);
switch (ring) {
case RING_GFX:
fprintf(stderr, "RING_GFX:\n");
- radv_dump_graphics_state(graphics_pipeline, compute_pipeline,
+ radv_dump_graphics_state(queue->device,
+ graphics_pipeline, compute_pipeline,
stderr);
break;
case RING_COMPUTE:
fprintf(stderr, "RING_COMPUTE:\n");
- radv_dump_compute_state(compute_pipeline, stderr);
+ radv_dump_compute_state(queue->device,
+ compute_pipeline, stderr);
break;
default:
assert(0);
break;
}
- radv_dump_trace(queue->device, cs);
abort();
}
void
-radv_print_spirv(uint32_t *data, uint32_t size, FILE *fp)
+radv_print_spirv(const char *data, uint32_t size, FILE *fp)
{
char path[] = "/tmp/fileXXXXXX";
char line[2048], command[128];