Lines Matching refs:window

232 struct window {
234 struct list_head parent_link; /* link in parent window list of children */
244 void (*display)(struct window*);
245 void (*destroy)(struct window*);
249 struct window base;
265 struct window base;
271 struct window base;
279 struct window base;
288 struct window base;
321 struct window file_window;
322 struct window commands_window;
323 struct window registers_window;
347 destroy_window_noop(struct window *win)
354 display_shader_window(struct window *win)
356 struct shader_window *window = (struct shader_window *) win;
358 if (window->shader) {
360 window->shader, window->shader_size,
369 destroy_shader_window(struct window *win)
371 struct shader_window *window = (struct shader_window *) win;
373 free(window->shader);
374 free(window);
380 struct shader_window *window = xtzalloc(*window);
382 snprintf(window->base.name, sizeof(window->base.name),
383 "%s (0x%" PRIx64 ")##%p", desc, address, window);
385 list_inithead(&window->base.parent_link);
386 window->base.position = ImVec2(-1, -1);
387 window->base.size = ImVec2(700, 300);
388 window->base.opened = true;
389 window->base.display = display_shader_window;
390 window->base.destroy = destroy_shader_window;
395 FILE *f = open_memstream(&window->shader, &window->shader_size);
404 list_addtail(&window->base.link, &context.windows);
406 return window;
412 display_urb_window(struct window *win)
414 struct urb_window *window = (struct urb_window *) win;
425 window->urb_view.DrawAllocation("##urb",
426 ARRAY_SIZE(window->urb_stages),
427 window->end_urb_offset,
429 &window->urb_stages[0]);
433 destroy_urb_window(struct window *win)
435 struct urb_window *window = (struct urb_window *) win;
437 free(window);
443 struct urb_window *window = xtzalloc(*window);
445 snprintf(window->base.name, sizeof(window->base.name),
446 "URB view (0x%" PRIx64 ")##%p", address, window);
448 list_inithead(&window->base.parent_link);
449 window->base.position = ImVec2(-1, -1);
450 window->base.size = ImVec2(700, 300);
451 window->base.opened = true;
452 window->base.display = display_urb_window;
453 window->base.destroy = destroy_urb_window;
455 window->end_urb_offset = decode_ctx->end_urb_offset;
456 memcpy(window->urb_stages, decode_ctx->urb_stages, sizeof(window->urb_stages));
457 window->urb_view = AubinatorViewerUrb();
459 list_addtail(&window->base.link, &context.windows);
461 return window;
469 struct edit_window *window = (struct edit_window *) data;
471 return *((const uint8_t *) window->gtt_bo.map + window->gtt_offset + off);
477 struct edit_window *window = (struct edit_window *) data;
478 uint8_t *gtt = (uint8_t *) window->gtt_bo.map + window->gtt_offset + off;
479 uint8_t *aub = (uint8_t *) window->aub_bo.map + window->aub_offset + off;
485 display_edit_window(struct window *win)
487 struct edit_window *window = (struct edit_window *) win;
489 if (window->aub_bo.map && window->gtt_bo.map) {
491 window->editor.DrawContents((uint8_t *) window,
492 MIN3(window->len,
493 window->gtt_bo.size - window->gtt_offset,
494 window->aub_bo.size - window->aub_offset),
495 window->address);
498 ImGui::Text("Memory view at 0x%" PRIx64 " not available", window->address);
503 destroy_edit_window(struct window *win)
505 struct edit_window *window = (struct edit_window *) win;
507 if (window->aub_bo.map)
508 mprotect((void *) window->aub_bo.map, 4096, PROT_READ);
509 free(window);
515 struct edit_window *window = xtzalloc(*window);
517 snprintf(window->base.name, sizeof(window->base.name),
518 "Editing aub at 0x%" PRIx64 "##%p", address, window);
520 list_inithead(&window->base.parent_link);
521 window->base.position = ImVec2(-1, -1);
522 window->base.size = ImVec2(500, 600);
523 window->base.opened = true;
524 window->base.display = display_edit_window;
525 window->base.destroy = destroy_edit_window;
527 window->mem = mem;
528 window->address = address;
529 window->aub_bo = aub_mem_get_ppgtt_addr_aub_data(mem, address);
530 window->gtt_bo = aub_mem_get_ppgtt_addr_data(mem, address);
531 window->len = len;
532 window->editor = MemoryEditor();
533 window->editor.OptShowDataPreview = true;
534 window->editor.OptShowAscii = false;
535 window->editor.ReadFn = read_edit_window;
536 window->editor.WriteFn = write_edit_window;
538 if (window->aub_bo.map) {
539 uint64_t unaligned_map = (uint64_t) window->aub_bo.map;
540 window->aub_bo.map = (const void *)(unaligned_map & ~0xffful);
541 window->aub_offset = unaligned_map - (uint64_t) window->aub_bo.map;
543 if (mprotect((void *) window->aub_bo.map, window->aub_bo.size, PROT_READ | PROT_WRITE) != 0) {
544 window->aub_bo.map = NULL;
548 window->gtt_offset = address - window->gtt_bo.addr;
550 list_addtail(&window->base.link, &context.windows);
552 return window;
600 display_pml4_window(struct window *win)
602 struct pml4_window *window = (struct pml4_window *) win;
604 ImGui::Text("pml4: %" PRIx64, window->mem->pml4);
606 display_pml4_level(window->mem, window->mem->pml4, 0, 4);
611 show_pml4_window(struct pml4_window *window, struct aub_mem *mem)
613 if (window->base.opened) {
614 window->base.opened = false;
618 snprintf(window->base.name, sizeof(window->base.name),
619 "4-Level page tables##%p", window);
621 list_inithead(&window->base.parent_link);
622 window->base.position = ImVec2(-1, -1);
623 window->base.size = ImVec2(500, 600);
624 window->base.opened = true;
625 window->base.display = display_pml4_window;
626 window->base.destroy = destroy_window_noop;
628 window->mem = mem;
630 list_addtail(&window->base.link, &context.windows);
649 struct batch_window *window = (struct batch_window *) user_data;
651 new_shader_window(&window->mem, address, shader_desc);
653 list_add(&shader_window->base.parent_link, &window->base.children_windows);
659 struct batch_window *window = (struct batch_window *) user_data;
660 struct urb_window *urb_window = new_urb_window(&window->decode_ctx, 0);
662 list_add(&urb_window->base.parent_link, &window->base.children_windows);
668 struct batch_window *window = (struct batch_window *) user_data;
670 new_edit_window(&window->mem, address, len);
672 list_add(&edit_window->base.parent_link, &window->base.children_windows);
678 struct batch_window *window = (struct batch_window *) user_data;
680 if (window->uses_ppgtt && ppgtt)
681 return aub_mem_get_ppgtt_bo(&window->mem, address);
683 return aub_mem_get_ggtt_bo(&window->mem, address);
687 update_batch_window(struct batch_window *window, bool reset, int exec_idx)
690 aub_mem_fini(&window->mem);
691 aub_mem_init(&window->mem);
693 window->exec_idx = MAX2(MIN2(context.file->n_execs - 1, exec_idx), 0);
694 update_mem_for_exec(&window->mem, context.file, window->exec_idx);
701 struct batch_window *window = (struct batch_window *) user_data;
703 window->uses_ppgtt = false;
705 aub_viewer_render_batch(&window->decode_ctx, data, data_len, 0, false);
713 struct batch_window *window = (struct batch_window *) user_data;
718 aub_mem_get_ggtt_bo(&window->mem, pphwsp_addr);
728 window->mem.pml4 = (uint64_t)context_img[49] << 32 | context_img[51];
731 aub_mem_get_ggtt_bo(&window->mem, ring_buffer_start);
735 window->uses_ppgtt = true;
737 window->decode_ctx.engine = engine;
738 aub_viewer_render_batch(&window->decode_ctx, commands,
744 display_batch_window(struct window *win)
746 struct batch_window *window = (struct batch_window *) win;
750 display_decode_options(&window->decode_cfg);
753 if (ImGui::InputInt("Execbuf", &window->exec_idx))
754 update_batch_window(window, true, window->exec_idx);
757 update_batch_window(window, true, window->exec_idx - 1);
759 update_batch_window(window, true, window->exec_idx + 1);
761 ImGui::Text("execbuf %i", window->exec_idx);
762 if (ImGui::Button("Show PPGTT")) { show_pml4_window(&window->pml4_window, &window->mem); }
767 read.user_data = window;
771 const uint8_t *iter = context.file->execs[window->exec_idx].start;
772 while (iter < context.file->execs[window->exec_idx].end) {
774 context.file->execs[window->exec_idx].end - iter);
781 destroy_batch_window(struct window *win)
783 struct batch_window *window = (struct batch_window *) win;
785 aub_mem_fini(&window->mem);
791 list_for_each_entry(struct window, child_window,
792 &window->base.children_windows, parent_link)
794 window->pml4_window.base.opened = false;
796 free(window);
802 struct batch_window *window = xtzalloc(*window);
804 snprintf(window->base.name, sizeof(window->base.name),
805 "Batch view##%p", window);
807 list_inithead(&window->base.parent_link);
808 list_inithead(&window->base.children_windows);
809 window->base.position = ImVec2(-1, -1);
810 window->base.size = ImVec2(600, 700);
811 window->base.opened = true;
812 window->base.display = display_batch_window;
813 window->base.destroy = destroy_batch_window;
815 window->collapsed = true;
816 window->decode_cfg = aub_viewer_decode_cfg();
818 aub_viewer_decode_ctx_init(&window->decode_ctx,
820 &window->decode_cfg,
825 window);
826 window->decode_ctx.display_shader = batch_display_shader;
827 window->decode_ctx.display_urb = batch_display_urb;
828 window->decode_ctx.edit_address = batch_edit_address;
830 update_batch_window(window, false, exec_idx);
832 list_addtail(&window->base.link, &context.windows);
838 display_registers_window(struct window *win)
862 struct window *window = &context.registers_window;
864 if (window->opened) {
865 window->opened = false;
869 snprintf(window->name, sizeof(window->name), "Registers");
871 list_inithead(&window->parent_link);
872 window->position = ImVec2(-1, -1);
873 window->size = ImVec2(200, 400);
874 window->opened = true;
875 window->display = display_registers_window;
876 window->destroy = destroy_window_noop;
878 list_addtail(&window->link, &context.windows);
882 display_commands_window(struct window *win)
946 struct window *window = &context.commands_window;
948 if (window->opened) {
949 window->opened = false;
953 snprintf(window->name, sizeof(window->name), "Commands & structs");
955 list_inithead(&window->parent_link);
956 window->position = ImVec2(-1, -1);
957 window->size = ImVec2(300, 400);
958 window->opened = true;
959 window->display = display_commands_window;
960 window->destroy = destroy_window_noop;
962 list_addtail(&window->link, &context.windows);
965 /* Main window */
986 display_aubfile_window(struct window *win)
1004 if (ImGui::Button("New batch window") || has_ctrl_key('b')) { new_batch_window(0); }
1022 "Ctrl-b", "new batch window",
1024 "Ctrl-Tab", "switch focus between window",
1025 "Ctrl-left/right", "align window to the side of the screen",
1045 struct window *window = &context.file_window;
1047 if (window->opened)
1050 snprintf(window->name, sizeof(window->name),
1053 list_inithead(&window->parent_link);
1054 window->size = ImVec2(-1, 250);
1055 window->position = ImVec2(0, 0);
1056 window->opened = true;
1057 window->display = display_aubfile_window;
1058 window->destroy = NULL;
1060 list_addtail(&window->link, &context.windows);
1072 list_for_each_entry_safe(struct window, window, &context.windows, link) {
1073 if (window->opened)
1077 if (window == &context.file_window) {
1078 window->opened = true;
1082 list_del(&window->link);
1083 list_del(&window->parent_link);
1084 if (window->destroy)
1085 window->destroy(window);
1088 list_for_each_entry_safe(struct window, window, &context.windows, link) {
1089 ImGui::SetNextWindowPos(window->position, ImGuiCond_FirstUseEver);
1090 ImGui::SetNextWindowSize(window->size, ImGuiCond_FirstUseEver);
1091 if (ImGui::Begin(window->name, &window->opened)) {
1092 window->display(window);
1093 window->position = ImGui::GetWindowPos();
1094 window->size = ImGui::GetWindowSize();
1097 window->opened = false;