intel/tools: Support multiple contexts in intel_dump_gpu.
[mesa.git] / src / intel / tools / aub_write.h
index 2597234c1c761094debf75ccbb8ef3057dbe462f..b4f8649b38400fc603e295176a747e8db56a1f35 100644 (file)
@@ -28,6 +28,8 @@
 #include <stdint.h>
 #include <stdio.h>
 
+#include "drm-uapi/i915_drm.h"
+
 #include "dev/gen_device_info.h"
 #include "common/gen_gem.h"
 
 extern "C" {
 #endif
 
+#define MAX_CONTEXT_COUNT 64
+
 struct aub_ppgtt_table {
    uint64_t phys_addr;
    struct aub_ppgtt_table *subtables[512];
 };
 
+struct aub_hw_context {
+   bool initialized;
+   uint64_t ring_addr;
+   uint64_t pphwsp_addr;
+};
+
+/* GEM context, as seen from userspace */
+struct aub_context {
+   uint32_t id;
+   struct aub_hw_context hw_contexts[I915_ENGINE_CLASS_VIDEO + 1];
+};
+
 struct aub_file {
    FILE *file;
 
+   bool has_default_setup;
+
    /* Set if you want extra logging */
    FILE *verbose_log_file;
 
@@ -52,6 +70,17 @@ struct aub_file {
    int addr_bits;
 
    struct aub_ppgtt_table pml4;
+   uint64_t phys_addrs_allocator;
+   uint64_t ggtt_addrs_allocator;
+
+   struct {
+      uint64_t hwsp_addr;
+   } engine_setup[I915_ENGINE_CLASS_VIDEO_ENHANCE + 1];
+
+   struct aub_context contexts[MAX_CONTEXT_COUNT];
+   int num_contexts;
+
+   uint32_t next_context_handle;
 };
 
 void aub_file_init(struct aub_file *aub, FILE *file, FILE *debug, uint16_t pci_id, const char *app_name);
@@ -76,11 +105,16 @@ aub_write_reloc(const struct gen_device_info *devinfo, void *p, uint64_t v)
 
 void aub_write_default_setup(struct aub_file *aub);
 void aub_map_ppgtt(struct aub_file *aub, uint64_t start, uint64_t size);
+void aub_write_ggtt(struct aub_file *aub, uint64_t virt_addr, uint64_t size, const void *data);
 void aub_write_trace_block(struct aub_file *aub,
                            uint32_t type, void *virtual,
                            uint32_t size, uint64_t gtt_offset);
-void aub_write_exec(struct aub_file *aub, uint64_t batch_addr,
-                    uint64_t offset, int ring_flag);
+void aub_write_exec(struct aub_file *aub, uint32_t ctx_id, uint64_t batch_addr,
+                    uint64_t offset, enum drm_i915_gem_engine_class engine_class);
+void aub_write_context_execlists(struct aub_file *aub, uint64_t context_addr,
+                                 enum drm_i915_gem_engine_class engine_class);
+
+uint32_t aub_write_context_create(struct aub_file *aub, uint32_t *ctx_id);
 
 #ifdef __cplusplus
 }