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;
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);
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