Several test functions will call gem_linear_blt(), so move this function to drm_test.c. Signed-off-by: Xiong Zhang <xiong.y.zhang@xxxxxxxxx> --- lib/drmtest.c | 75 ++++++++++++++++++++++++++++++++++++ lib/drmtest.h | 5 +++ tests/gem_exec_blt.c | 84 +---------------------------------------- tests/gem_exec_faulting_reloc.c | 84 +---------------------------------------- tests/gem_pin.c | 51 ++----------------------- 5 files changed, 88 insertions(+), 211 deletions(-) diff --git a/lib/drmtest.c b/lib/drmtest.c index 713c5ff..7f79fd3 100644 --- a/lib/drmtest.c +++ b/lib/drmtest.c @@ -554,6 +554,81 @@ int gem_madvise(int fd, uint32_t handle, int state) return madv.retained; } + +int gem_linear_blt(uint32_t *batch, + uint32_t src, + uint32_t dst, + uint32_t length, + struct drm_i915_gem_relocation_entry *reloc) +{ + uint32_t *b = batch; + int height = length / (16 * 1024); + + assert(height <= 1<<16); + + if (height) { + b[0] = XY_SRC_COPY_BLT_CMD | XY_SRC_COPY_BLT_WRITE_ALPHA | XY_SRC_COPY_BLT_WRITE_RGB; + b[1] = 0xcc << 16 | 1 << 25 | 1 << 24 | (16*1024); + b[2] = 0; + b[3] = height << 16 | (4*1024); + b[4] = 0; + reloc->offset = (b-batch+4) * sizeof(uint32_t); + reloc->delta = 0; + reloc->target_handle = dst; + reloc->read_domains = I915_GEM_DOMAIN_RENDER; + reloc->write_domain = I915_GEM_DOMAIN_RENDER; + reloc->presumed_offset = 0; + reloc++; + + b[5] = 0; + b[6] = 16*1024; + b[7] = 0; + reloc->offset = (b-batch+7) * sizeof(uint32_t); + reloc->delta = 0; + reloc->target_handle = src; + reloc->read_domains = I915_GEM_DOMAIN_RENDER; + reloc->write_domain = 0; + reloc->presumed_offset = 0; + reloc++; + + b += 8; + length -= height * 16*1024; + } + + if (length) { + b[0] = XY_SRC_COPY_BLT_CMD | XY_SRC_COPY_BLT_WRITE_ALPHA | XY_SRC_COPY_BLT_WRITE_RGB; + b[1] = 0xcc << 16 | 1 << 25 | 1 << 24 | (16*1024); + b[2] = height << 16; + b[3] = (1+height) << 16 | (length / 4); + b[4] = 0; + reloc->offset = (b-batch+4) * sizeof(uint32_t); + reloc->delta = 0; + reloc->target_handle = dst; + reloc->read_domains = I915_GEM_DOMAIN_RENDER; + reloc->write_domain = I915_GEM_DOMAIN_RENDER; + reloc->presumed_offset = 0; + reloc++; + + b[5] = height << 16; + b[6] = 16*1024; + b[7] = 0; + reloc->offset = (b-batch+7) * sizeof(uint32_t); + reloc->delta = 0; + reloc->target_handle = src; + reloc->read_domains = I915_GEM_DOMAIN_RENDER; + reloc->write_domain = 0; + reloc->presumed_offset = 0; + reloc++; + + b += 8; + } + + b[0] = MI_BATCH_BUFFER_END; + b[1] = 0; + + return (b+2 - batch) * sizeof(uint32_t); +} + /* prime */ int prime_handle_to_fd(int fd, uint32_t handle) { diff --git a/lib/drmtest.h b/lib/drmtest.h index 80b344c..c179aed 100644 --- a/lib/drmtest.h +++ b/lib/drmtest.h @@ -36,6 +36,7 @@ #include "xf86drm.h" #include "xf86drmMode.h" #include "intel_batchbuffer.h" +#include "i915_drm.h" drm_intel_bo * gem_handle_to_libdrm_bo(drm_intel_bufmgr *bufmgr, int fd, const char *name, uint32_t handle); @@ -72,6 +73,10 @@ uint64_t gem_aperture_size(int fd); uint64_t gem_mappable_aperture_size(void); int gem_madvise(int fd, uint32_t handle, int state); +int gem_linear_blt(uint32_t *batch, uint32_t src, + uint32_t dst, uint32_t length, + struct drm_i915_gem_relocation_entry *reloc); + /* feature test helpers */ bool gem_uses_aliasing_ppgtt(int fd); int gem_available_fences(int fd); diff --git a/tests/gem_exec_blt.c b/tests/gem_exec_blt.c index eb5ae66..6a0f863 100644 --- a/tests/gem_exec_blt.c +++ b/tests/gem_exec_blt.c @@ -46,94 +46,14 @@ #define OBJECT_SIZE 16384 -#define COPY_BLT_CMD (2<<29|0x53<<22|0x6) -#define BLT_WRITE_ALPHA (1<<21) -#define BLT_WRITE_RGB (1<<20) -#define BLT_SRC_TILED (1<<15) -#define BLT_DST_TILED (1<<11) - -static int gem_linear_blt(uint32_t *batch, - uint32_t src, - uint32_t dst, - uint32_t length, - struct drm_i915_gem_relocation_entry *reloc) -{ - uint32_t *b = batch; - int height = length / (16 * 1024); - - assert(height <= 1<<16); - - if (height) { - b[0] = COPY_BLT_CMD | BLT_WRITE_ALPHA | BLT_WRITE_RGB; - b[1] = 0xcc << 16 | 1 << 25 | 1 << 24 | (16*1024); - b[2] = 0; - b[3] = height << 16 | (4*1024); - b[4] = 0; - reloc->offset = (b-batch+4) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = dst; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = I915_GEM_DOMAIN_RENDER; - reloc->presumed_offset = 0; - reloc++; - - b[5] = 0; - b[6] = 16*1024; - b[7] = 0; - reloc->offset = (b-batch+7) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = src; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = 0; - reloc->presumed_offset = 0; - reloc++; - - b += 8; - length -= height * 16*1024; - } - - if (length) { - b[0] = COPY_BLT_CMD | BLT_WRITE_ALPHA | BLT_WRITE_RGB; - b[1] = 0xcc << 16 | 1 << 25 | 1 << 24 | (16*1024); - b[2] = height << 16; - b[3] = (1+height) << 16 | (length / 4); - b[4] = 0; - reloc->offset = (b-batch+4) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = dst; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = I915_GEM_DOMAIN_RENDER; - reloc->presumed_offset = 0; - reloc++; - - b[5] = height << 16; - b[6] = 16*1024; - b[7] = 0; - reloc->offset = (b-batch+7) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = src; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = 0; - reloc->presumed_offset = 0; - reloc++; - - b += 8; - } - - b[0] = MI_BATCH_BUFFER_END; - b[1] = 0; - - return (b+2 - batch) * sizeof(uint32_t); -} - static int gem_exec(int fd, struct drm_i915_gem_execbuffer2 *execbuf, int loops) { int ret = 0; while (loops-- && ret == 0) { ret = drmIoctl(fd, - DRM_IOCTL_I915_GEM_EXECBUFFER2, - execbuf); + DRM_IOCTL_I915_GEM_EXECBUFFER2, + execbuf); } return ret; diff --git a/tests/gem_exec_faulting_reloc.c b/tests/gem_exec_faulting_reloc.c index 863a1b0..2aef6ba 100644 --- a/tests/gem_exec_faulting_reloc.c +++ b/tests/gem_exec_faulting_reloc.c @@ -51,93 +51,13 @@ #define OBJECT_SIZE 16384 -#define COPY_BLT_CMD (2<<29|0x53<<22|0x6) -#define BLT_WRITE_ALPHA (1<<21) -#define BLT_WRITE_RGB (1<<20) -#define BLT_SRC_TILED (1<<15) -#define BLT_DST_TILED (1<<11) - -static int gem_linear_blt(uint32_t *batch, - uint32_t src, - uint32_t dst, - uint32_t length, - struct drm_i915_gem_relocation_entry *reloc) -{ - uint32_t *b = batch; - int height = length / (16 * 1024); - - assert(height <= 1<<16); - - if (height) { - b[0] = COPY_BLT_CMD | BLT_WRITE_ALPHA | BLT_WRITE_RGB; - b[1] = 0xcc << 16 | 1 << 25 | 1 << 24 | (16*1024); - b[2] = 0; - b[3] = height << 16 | (4*1024); - b[4] = 0; - reloc->offset = (b-batch+4) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = dst; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = I915_GEM_DOMAIN_RENDER; - reloc->presumed_offset = 0; - reloc++; - - b[5] = 0; - b[6] = 16*1024; - b[7] = 0; - reloc->offset = (b-batch+7) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = src; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = 0; - reloc->presumed_offset = 0; - reloc++; - - b += 8; - length -= height * 16*1024; - } - - if (length) { - b[0] = COPY_BLT_CMD | BLT_WRITE_ALPHA | BLT_WRITE_RGB; - b[1] = 0xcc << 16 | 1 << 25 | 1 << 24 | (16*1024); - b[2] = height << 16; - b[3] = (1+height) << 16 | (length / 4); - b[4] = 0; - reloc->offset = (b-batch+4) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = dst; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = I915_GEM_DOMAIN_RENDER; - reloc->presumed_offset = 0; - reloc++; - - b[5] = height << 16; - b[6] = 16*1024; - b[7] = 0; - reloc->offset = (b-batch+7) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = src; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = 0; - reloc->presumed_offset = 0; - reloc++; - - b += 8; - } - - b[0] = MI_BATCH_BUFFER_END; - b[1] = 0; - - return (b+2 - batch) * sizeof(uint32_t); -} - static void gem_exec(int fd, struct drm_i915_gem_execbuffer2 *execbuf) { int ret; ret = drmIoctl(fd, - DRM_IOCTL_I915_GEM_EXECBUFFER2, - execbuf); + DRM_IOCTL_I915_GEM_EXECBUFFER2, + execbuf); assert(ret == 0); } diff --git a/tests/gem_pin.c b/tests/gem_pin.c index edf5e60..cd19216 100644 --- a/tests/gem_pin.c +++ b/tests/gem_pin.c @@ -42,10 +42,6 @@ #include "intel_chipset.h" #include "intel_gpu_tools.h" -#define COPY_BLT_CMD (2<<29|0x53<<22|0x6) -#define BLT_WRITE_ALPHA (1<<21) -#define BLT_WRITE_RGB (1<<20) - static void exec(int fd, uint32_t handle, uint32_t offset) { struct drm_i915_gem_execbuffer2 execbuf; @@ -84,46 +80,6 @@ static void exec(int fd, uint32_t handle, uint32_t offset) assert(gem_exec[0].offset == offset); } -static int gem_linear_blt(uint32_t *batch, - uint32_t src, - uint32_t dst, - uint32_t length, - struct drm_i915_gem_relocation_entry *reloc) -{ - uint32_t *b = batch; - - b[0] = COPY_BLT_CMD | BLT_WRITE_ALPHA | BLT_WRITE_RGB; - b[1] = 0x66 << 16 | 1 << 25 | 1 << 24 | (4*1024); - b[2] = 0; - b[3] = (length / (4*1024)) << 16 | 1024; - b[4] = 0; - reloc->offset = (b-batch+4) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = dst; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = I915_GEM_DOMAIN_RENDER; - reloc->presumed_offset = 0; - reloc++; - - b[5] = 0; - b[6] = 4*1024; - b[7] = 0; - reloc->offset = (b-batch+7) * sizeof(uint32_t); - reloc->delta = 0; - reloc->target_handle = src; - reloc->read_domains = I915_GEM_DOMAIN_RENDER; - reloc->write_domain = 0; - reloc->presumed_offset = 0; - reloc++; - - b += 8; - - b[0] = MI_BATCH_BUFFER_END; - b[1] = 0; - - return (b+2 - batch) * sizeof(uint32_t); -} - static void make_busy(int fd, uint32_t handle) { struct drm_i915_gem_execbuffer2 execbuf; @@ -131,9 +87,10 @@ static void make_busy(int fd, uint32_t handle) struct drm_i915_gem_relocation_entry reloc[2]; uint32_t batch[20]; uint32_t tmp; - int count; + int count, len; tmp = gem_create(fd, 1024*1024); + len = gem_linear_blt(batch, tmp, tmp, 1024*1024, reloc); obj[0].handle = tmp; obj[0].relocation_count = 0; @@ -145,7 +102,7 @@ static void make_busy(int fd, uint32_t handle) obj[0].rsvd2 = 0; obj[1].handle = handle; - obj[1].relocation_count = 2; + obj[1].relocation_count = len > 40 ? 4 : 2; obj[1].relocs_ptr = (uintptr_t) reloc; obj[1].alignment = 0; obj[1].offset = 0; @@ -156,7 +113,7 @@ static void make_busy(int fd, uint32_t handle) execbuf.buffers_ptr = (uintptr_t)obj; execbuf.buffer_count = 2; execbuf.batch_start_offset = 0; - execbuf.batch_len = gem_linear_blt(batch, tmp, tmp, 1024*1024,reloc); + execbuf.batch_len = len; execbuf.cliprects_ptr = 0; execbuf.num_cliprects = 0; execbuf.DR1 = 0; -- 1.8.3.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx