[Mesa-dev] [PATCH v3 2/6] i965: Enable resource streamer for the batchbuffer
Chris Wilson
chris at chris-wilson.co.uk
Tue Jun 16 05:20:45 PDT 2015
On Tue, Jun 16, 2015 at 03:08:56PM +0300, Abdiel Janulgue wrote:
> Check first if the hardware and kernel supports resource streamer. If this
> is allowed, tell the kernel to enable the resource streamer enable bit on
> MI_BATCHBUFFER_START by specifying I915_EXEC_RESOURCE_STREAMER
> execbuffer flags.
>
> v2: - Use new I915_PARAM_HAS_RESOURCE_STREAMER ioctl to check if kernel
> supports RS (Ken).
> - Add brw_device_info::has_resource_streamer and toggle it for
> Haswell, Broadwell, Cherryview, Skylake, and Broxton (Ken).
> v3: - Update I915_PARAM_HAS_RESOURCE_STREAMER to match updated kernel.
>
> Cc: kenneth at whitecape.org
> Signed-off-by: Abdiel Janulgue <abdiel.janulgue at linux.intel.com>
> ---
> src/mesa/drivers/dri/i965/brw_context.c | 5 +++++
> src/mesa/drivers/dri/i965/brw_context.h | 1 +
> src/mesa/drivers/dri/i965/brw_device_info.c | 5 ++++-
> src/mesa/drivers/dri/i965/brw_device_info.h | 1 +
> src/mesa/drivers/dri/i965/intel_batchbuffer.c | 8 +++++++-
> src/mesa/drivers/dri/i965/intel_screen.c | 12 ++++++++++++
> src/mesa/drivers/dri/i965/intel_screen.h | 5 +++++
> 7 files changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
> index f39b350..27abf0e 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.c
> +++ b/src/mesa/drivers/dri/i965/brw_context.c
> @@ -896,6 +896,11 @@ brwCreateContext(gl_api api,
>
> brw->predicate.state = BRW_PREDICATE_STATE_RENDER;
>
> + brw->use_resource_streamer = devinfo->has_resource_streamer &&
> + screen->has_resource_streamer &&
> + (brw_env_var_as_boolean("INTEL_USE_HW_BT", false) ||
> + brw_env_var_as_boolean("INTEL_USE_GATHER", false));
Do you expect the envionment to change between contexts? Looks like all
of these can be used to compute screen->has_resource_streamer.
dev_info->has_resource_streamer is superfluous as well since it just
requires the kernel support.
> /**
> * This is the driver specific part of the createNewScreen entry point.
> * Called when using DRI2.
> @@ -1420,6 +1425,13 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)
> intelScreen->compiler = brw_compiler_create(intelScreen,
> intelScreen->devinfo);
>
> + if (intelScreen->devinfo->is_haswell || intelScreen->devinfo->gen >= 8) {
> + getparam.param = I915_PARAM_HAS_RESOURCE_STREAMER;
So devinfo->has_resource_streamer was just a mirage after all.
> + const int ret = drmIoctl(psp->fd, DRM_IOCTL_I915_GETPARAM, &getparam);
> + intelScreen->has_resource_streamer = (ret != -1 || errno != EINVAL);
NO!!! You must always inspect the getparam.value. The trick is.
getparam.param = HAS_RESOURCE_STREAMER;
getparam.value = &val;
val = -1;
drmIoctl(psp->fd, DRM_IOCTL_I915_GETPARAM, &getparam);
intelScreen->has_resource_streamer = val > 0;
Hmm, now I need to double check the kernel patch for you GETPARAM.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the mesa-dev
mailing list