int fd;
drm_intel_bufmgr *bufmgr;
struct intel_winsys_info info;
+ unsigned long exec_flags;
struct drm_intel_decode *decode;
};
}
static bool
-init_info(struct intel_winsys *winsys)
+probe_winsys(struct intel_winsys *winsys)
{
struct intel_winsys_info *info = &winsys->info;
int val;
get_param(winsys, I915_PARAM_HAS_GEN7_SOL_RESET, &val);
info->has_gen7_sol_reset = val;
+ /*
+ * pipe drivers are expected to write the presumed offsets after adding
+ * reloc entries
+ */
+ get_param(winsys, I915_PARAM_HAS_EXEC_NO_RELOC, &val);
+ if (val)
+ winsys->exec_flags |= I915_EXEC_NO_RELOC;
+
return true;
}
return NULL;
}
- if (!init_info(winsys)) {
+ if (!probe_winsys(winsys)) {
drm_intel_bufmgr_destroy(winsys->bufmgr);
FREE(winsys);
return NULL;
struct intel_context *ctx,
unsigned long flags)
{
- const unsigned long exec_flags = (unsigned long) ring | flags;
+ const unsigned long exec_flags =
+ winsys->exec_flags | (unsigned long) ring | flags;
/* logical contexts are only available for the render ring */
if (ring != INTEL_RING_RENDER)
* When \p bo is submitted for execution, and if \p target_bo has moved,
* the kernel will patch \p bo at \p offset to \p target_bo->offset plus
* \p target_offset.
+ *
+ * \p presumed_offset should be written to \p bo at \p offset.
*/
int
intel_bo_add_reloc(struct intel_bo *bo, uint32_t offset,