intel/tools: Support multiple contexts in intel_dump_gpu.
[mesa.git] / src / intel / tools / aub_write.h
index 604dfbc8cc5a9024bad8d19155f4f73c420b3761..b4f8649b38400fc603e295176a747e8db56a1f35 100644 (file)
 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;
 
@@ -55,12 +71,16 @@ struct aub_file {
 
    struct aub_ppgtt_table pml4;
    uint64_t phys_addrs_allocator;
+   uint64_t ggtt_addrs_allocator;
 
    struct {
-      uint64_t ring_addr;
-      uint64_t pphwsp_addr;
-      uint64_t descriptor;
+      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);
@@ -85,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,
+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
 }