summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_bufmgr.c1
-rw-r--r--src/mesa/drivers/dri/i965/brw_bufmgr.h5
-rw-r--r--src/mesa/drivers/dri/i965/brw_program_cache.c4
-rw-r--r--src/mesa/drivers/dri/i965/intel_batchbuffer.c2
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.c8
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.h7
6 files changed, 26 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c
index 4b6433178d0..2f179347009 100644
--- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
+++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
@@ -599,6 +599,7 @@ bo_unreference_final(struct brw_bo *bo, time_t time)
bo->free_time = time;
bo->name = NULL;
+ bo->kflags = 0;
list_addtail(&bo->head, &bucket->head);
} else {
diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.h b/src/mesa/drivers/dri/i965/brw_bufmgr.h
index 1b1790a8cb4..56ec206d303 100644
--- a/src/mesa/drivers/dri/i965/brw_bufmgr.h
+++ b/src/mesa/drivers/dri/i965/brw_bufmgr.h
@@ -97,6 +97,11 @@ struct brw_bo {
int refcount;
const char *name;
+#ifndef EXEC_OBJECT_CAPTURE
+#define EXEC_OBJECT_CAPTURE (1<<7)
+#endif
+ uint64_t kflags;
+
/**
* Kenel-assigned global name for this object
*
diff --git a/src/mesa/drivers/dri/i965/brw_program_cache.c b/src/mesa/drivers/dri/i965/brw_program_cache.c
index b0e2962f88f..d3555b42391 100644
--- a/src/mesa/drivers/dri/i965/brw_program_cache.c
+++ b/src/mesa/drivers/dri/i965/brw_program_cache.c
@@ -216,6 +216,8 @@ brw_cache_new_bo(struct brw_cache *cache, uint32_t new_size)
struct brw_bo *new_bo;
new_bo = brw_bo_alloc(brw->bufmgr, "program cache", new_size, 64);
+ if (can_do_exec_capture(brw->screen))
+ new_bo->kflags = EXEC_OBJECT_CAPTURE;
if (brw->has_llc)
brw_bo_map_unsynchronized(brw, new_bo);
@@ -407,6 +409,8 @@ brw_init_caches(struct brw_context *brw)
calloc(cache->size, sizeof(struct brw_cache_item *));
cache->bo = brw_bo_alloc(brw->bufmgr, "program cache", 4096, 64);
+ if (can_do_exec_capture(brw->screen))
+ cache->bo->kflags = EXEC_OBJECT_CAPTURE;
if (brw->has_llc)
brw_bo_map_unsynchronized(brw, cache->bo);
}
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 2818458384d..36faa7ae6f5 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -550,7 +550,7 @@ add_exec_bo(struct intel_batchbuffer *batch, struct brw_bo *bo)
}
validation_entry->alignment = bo->align;
validation_entry->offset = bo->offset64;
- validation_entry->flags = 0;
+ validation_entry->flags = bo->kflags;
validation_entry->rsvd1 = 0;
validation_entry->rsvd2 = 0;
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 371772867e9..91ed128f832 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -2029,6 +2029,14 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen)
screen->cmd_parser_version = 0;
}
+ /* Kernel 4.13 retuired for exec object capture */
+#ifndef I915_PARAM_HAS_EXEC_CAPTURE
+#define I915_PARAM_HAS_EXEC_CAPTURE 45
+#endif
+ if (intel_get_boolean(screen, I915_PARAM_HAS_EXEC_CAPTURE)) {
+ screen->kernel_features |= KERNEL_ALLOWS_EXEC_CAPTURE;
+ }
+
if (!intel_detect_pipelined_so(screen)) {
/* We can't do anything, so the effective version is 0. */
screen->cmd_parser_version = 0;
diff --git a/src/mesa/drivers/dri/i965/intel_screen.h b/src/mesa/drivers/dri/i965/intel_screen.h
index fe0e0444b2d..f9c1db6df12 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.h
+++ b/src/mesa/drivers/dri/i965/intel_screen.h
@@ -74,6 +74,7 @@ struct intel_screen
#define KERNEL_ALLOWS_MI_MATH_AND_LRR (1<<2)
#define KERNEL_ALLOWS_HSW_SCRATCH1_AND_ROW_CHICKEN3 (1<<3)
#define KERNEL_ALLOWS_COMPUTE_DISPATCH (1<<4)
+#define KERNEL_ALLOWS_EXEC_CAPTURE (1<<5)
struct brw_bufmgr *bufmgr;
@@ -155,6 +156,12 @@ can_do_predicate_writes(const struct intel_screen *screen)
return screen->kernel_features & KERNEL_ALLOWS_PREDICATE_WRITES;
}
+static inline bool
+can_do_exec_capture(const struct intel_screen *screen)
+{
+ return screen->kernel_features & KERNEL_ALLOWS_EXEC_CAPTURE;
+}
+
#ifdef __cplusplus
}
#endif