[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