diff options
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_bufmgr.c | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_bufmgr.h | 5 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_program_cache.c | 4 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_batchbuffer.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_screen.c | 8 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_screen.h | 7 |
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 |