intel/tools: Support multiple contexts in intel_dump_gpu.
[mesa.git] / src / intel / tools / aub_write.h
index 31ca6253e0f411df9c7889248816ba9fad486803..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;
 
@@ -60,10 +74,13 @@ struct aub_file {
    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);
@@ -92,11 +109,13 @@ void aub_write_ggtt(struct aub_file *aub, uint64_t virt_addr, uint64_t size, con
 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
 }
 #endif