[igt-dev] [PATCH igt] lib: Provide an accelerated routine for readback from WC

Chris Wilson chris at chris-wilson.co.uk
Tue Feb 27 21:53:08 UTC 2018


Quoting Chris Wilson (2018-02-27 21:50:40)
> Reading from WC is awfully slow as each access is uncached and so
> performed synchronously, stalling for the memory load. x86 did introduce
> some new instructions in SSE 4.1 to provide a small internal buffer to
> accelerate reading back a cacheline at a time from uncached memory, for
> this purpose.
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  lib/igt_fb.c  |  3 ++-
>  lib/igt_x86.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_x86.h |  2 ++
>  3 files changed, 50 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index ecd73053..7404ba7c 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -32,6 +32,7 @@
>  #include "drmtest.h"
>  #include "igt_fb.h"
>  #include "igt_kms.h"
> +#include "igt_x86.h"
>  #include "ioctl_wrappers.h"
>  #include "intel_chipset.h"
>  
> @@ -1340,7 +1341,7 @@ static void convert_nv12_to_rgb24(struct igt_fb *fb, struct fb_convert_blit_uplo
>          * it's faster to copy the whole BO to a temporary buffer and convert
>          * from there.
>          */
> -       memcpy(buf, blit->linear.map, blit->linear.size);
> +       igt_memcpy_from_wc(buf, blit->linear.map, blit->linear.size);
>         y = &buf[blit->linear.offsets[0]];
>         uv = &buf[blit->linear.offsets[1]];
>  
> diff --git a/lib/igt_x86.c b/lib/igt_x86.c
> index 0ed3c6f1..b7b57284 100644
> --- a/lib/igt_x86.c
> +++ b/lib/igt_x86.c
> @@ -36,7 +36,10 @@
>  #endif
>  
>  #include "igt_x86.h"
> +
> +#include <stdint.h>
>  #include <stdio.h>
> +#include <string.h>
>  
>  /**
>   * SECTION:igt_x86
> @@ -174,3 +177,46 @@ char *igt_x86_features_to_string(unsigned features, char *line)
>         return ret;
>  }
>  #endif
> +
> +#if defined(__x86_64__) && !defined(__clang__)
> +#define MOVNT 512
> +
> +#pragma GCC push_options
> +#pragma GCC target("sse4.1")

Add
#pragma GCC diagnostic ignore "-Wpointer-arith"
for peace and quiet.
-Chris


More information about the igt-dev mailing list