Android.mk | 2 CONTRIBUTING | 45 MAINTAINERS | 2 Makefile.am | 4 NEWS | 57 README | 49 assembler/brw_defines.h | 9 assembler/disasm-main.c | 4 assembler/gen8_instruction.c | 20 assembler/gen8_instruction.h | 2 assembler/gram.y | 78 + assembler/main.c | 4 benchmarks/Android.mk | 2 configure.ac | 17 demos/Android.mk | 28 demos/intel_sprite_on.c | 138 +- docs/reference/intel-gpu-tools/.gitignore | 1 docs/reference/intel-gpu-tools/Makefile.am | 91 + docs/reference/intel-gpu-tools/igt_test_programs.xml | 305 ++++ docs/reference/intel-gpu-tools/intel-gpu-tools-docs.xml | 6 lib/Android.mk | 6 lib/Makefile.am | 6 lib/Makefile.sources | 18 lib/drmtest.c | 38 lib/drmtest.h | 2 lib/gen6_render.h | 5 lib/gen7_media.h | 2 lib/gen8_media.h | 14 lib/gen8_render.h | 24 lib/gen9_render.h | 17 lib/igt.cocci | 82 + lib/igt_aux.c | 264 +++- lib/igt_aux.h | 27 lib/igt_core.c | 496 +++++-- lib/igt_core.h | 127 + lib/igt_debugfs.c | 154 -- lib/igt_debugfs.h | 35 lib/igt_edid.h | 125 - lib/igt_fb.c | 163 ++ lib/igt_fb.h | 10 lib/igt_gt.c | 341 +++++ lib/igt_gt.h | 77 + lib/igt_kms.c | 278 ++-- lib/igt_kms.h | 30 lib/instdone.c | 10 lib/intel_batchbuffer.c | 304 ++++ lib/intel_batchbuffer.h | 67 - lib/intel_chipset.c | 27 lib/intel_chipset.h | 58 lib/intel_mmio.c | 10 lib/intel_os.c | 32 lib/intel_reg.h | 21 lib/ioctl_wrappers.c | 265 +++- lib/ioctl_wrappers.h | 81 + lib/media_fill.c | 16 lib/media_fill.h | 14 lib/media_fill_gen7.c | 161 ++ lib/media_fill_gen9.c | 392 ++++++ lib/rendercopy.h | 5 lib/rendercopy_gen8.c | 109 - lib/rendercopy_gen9.c | 1032 ++++++++++++++++ lib/tests/.gitignore | 10 lib/tests/Makefile.am | 19 lib/tests/Makefile.sources | 31 lib/tests/igt_command_line.sh | 76 + lib/tests/igt_fork_helper.c | 37 lib/tests/igt_invalid_subtest_name.c | 31 lib/tests/igt_list_only.c | 43 lib/tests/igt_no_exit.c | 40 lib/tests/igt_no_exit_list_only.c | 41 lib/tests/igt_no_subtest.c | 39 lib/tests/igt_simple_test_subtests.c | 31 lib/tests/igt_simulation.c | 169 ++ lib/tests/igt_timeout.c | 8 man/Makefile.am | 1 man/intel_gpu_frequency.man | 58 overlay/chart.c | 6 overlay/config.c | 1 overlay/gem-objects.c | 6 overlay/gpu-perf.c | 3 overlay/gpu-perf.h | 2 overlay/overlay.c | 22 overlay/x11/position.c | 3 scripts/list-workarounds | 2 shaders/gpgpu/README | 4 shaders/gpgpu/gpgpu_fill.gxa | 51 tests/.gitignore | 20 tests/1080p-left.png |binary tests/1080p-right.png |binary tests/Android.mk | 5 tests/Makefile.am | 10 tests/Makefile.sources | 31 tests/NAMING-CONVENTION | 71 - tests/core_get_client_auth.c | 8 tests/core_getclient.c | 5 tests/core_getstats.c | 3 tests/core_getversion.c | 6 tests/ddi_compute_wrpll.c | 626 --------- tests/drm_import_export.c | 183 ++ tests/drm_lib.sh | 16 tests/drm_read.c | 223 +++ tests/drm_vma_limiter.c | 2 tests/drv_hangman.c | 110 - tests/drv_module_reload | 15 tests/drv_suspend.c | 62 tests/eviction_common.c | 29 tests/gem_alive.c | 2 tests/gem_bad_blit.c | 2 tests/gem_bad_length.c | 4 tests/gem_bad_reloc.c | 91 + tests/gem_caching.c | 3 tests/gem_close_race.c | 2 tests/gem_concurrent_blit.c | 490 +++++-- tests/gem_cpu_reloc.c | 4 tests/gem_cs_prefetch.c | 4 tests/gem_cs_tlb.c | 7 tests/gem_ctx_bad_destroy.c | 61 tests/gem_ctx_bad_exec.c | 3 tests/gem_ctx_basic.c | 10 tests/gem_ctx_create.c | 47 tests/gem_ctx_exec.c | 28 tests/gem_ctx_param_basic.c | 137 ++ tests/gem_ctx_thrash.c | 313 ++++ tests/gem_double_irq_loop.c | 2 tests/gem_dummy_reloc_loop.c | 19 tests/gem_evict_alignment.c | 27 tests/gem_evict_everything.c | 27 tests/gem_exec_bad_domains.c | 5 tests/gem_exec_big.c | 105 + tests/gem_exec_blt.c | 59 tests/gem_exec_faulting_reloc.c | 5 tests/gem_exec_lut_handle.c | 5 tests/gem_exec_nop.c | 2 tests/gem_exec_params.c | 41 tests/gem_exec_parse.c | 143 ++ tests/gem_fence_thrash.c | 6 tests/gem_fence_upload.c | 73 + tests/gem_fenced_exec_thrash.c | 2 tests/gem_flink.c | 20 tests/gem_flink_race.c | 21 tests/gem_gpgpu_fill.c | 141 ++ tests/gem_gtt_cpu_tlb.c | 3 tests/gem_gtt_hog.c | 2 tests/gem_gtt_speed.c | 75 + tests/gem_hang.c | 2 tests/gem_hangcheck_forcewake.c | 3 tests/gem_linear_blits.c | 43 tests/gem_lut_handle.c | 5 tests/gem_madvise.c | 4 tests/gem_media_fill.c | 5 tests/gem_mmap.c | 2 tests/gem_mmap_gtt.c | 2 tests/gem_mmap_offset_exhaustion.c | 3 tests/gem_mmap_wc.c | 467 +++++++ tests/gem_multi_bsd_sync_loop.c | 2 tests/gem_non_secure_batch.c | 2 tests/gem_partial_pwrite_pread.c | 3 tests/gem_persistent_relocs.c | 4 tests/gem_pin.c | 2 tests/gem_pipe_control_store_loop.c | 2 tests/gem_ppgtt.c | 233 +++ tests/gem_pread_after_blit.c | 85 - tests/gem_pwrite_pread.c | 8 tests/gem_reloc_overflow.c | 2 tests/gem_reloc_vs_gpu.c | 115 - tests/gem_render_copy.c | 36 tests/gem_render_copy_redux.c | 4 tests/gem_render_linear_blits.c | 76 - tests/gem_render_tiled_blits.c | 74 - tests/gem_reset_stats.c | 251 +-- tests/gem_ring_sync_copy.c | 27 tests/gem_ring_sync_loop.c | 2 tests/gem_ringfill.c | 2 tests/gem_seqno_wrap.c | 35 tests/gem_set_tiling_vs_blt.c | 9 tests/gem_set_tiling_vs_gtt.c | 2 tests/gem_set_tiling_vs_pwrite.c | 2 tests/gem_storedw_batches_loop.c | 2 tests/gem_storedw_loop_blt.c | 2 tests/gem_storedw_loop_bsd.c | 2 tests/gem_storedw_loop_render.c | 2 tests/gem_storedw_loop_vebox.c | 2 tests/gem_stress.c | 17 tests/gem_threaded_access_tiled.c | 4 tests/gem_tiled_blits.c | 44 tests/gem_tiled_fence_blits.c | 2 tests/gem_tiled_partial_pwrite_pread.c | 3 tests/gem_tiled_pread.c | 4 tests/gem_tiled_pread_pwrite.c | 5 tests/gem_tiled_swapping.c | 158 +- tests/gem_tiled_wb.c | 243 +++ tests/gem_tiled_wc.c | 240 +++ tests/gem_tiling_max_stride.c | 2 tests/gem_unfence_active_buffers.c | 2 tests/gem_unref_active_buffers.c | 2 tests/gem_userptr_blits.c | 242 ++- tests/gem_wait.c | 278 ++++ tests/gem_wait_render_timeout.c | 230 --- tests/gem_workarounds.c | 130 +- tests/gem_write_read_ring_switch.c | 2 tests/gen3_mixed_blits.c | 6 tests/gen3_render_linear_blits.c | 4 tests/gen3_render_mixed_blits.c | 4 tests/gen3_render_tiledx_blits.c | 4 tests/gen3_render_tiledy_blits.c | 4 tests/gen7_forcewake_mt.c | 7 tests/igt_fork_helper.c | 37 tests/igt_list_only.c | 42 tests/igt_no_exit.c | 39 tests/igt_no_exit_list_only.c | 40 tests/igt_no_subtest.c | 38 tests/igt_simulation.c | 164 -- tests/kms_3d.c | 11 tests/kms_addfb.c | 147 ++ tests/kms_cursor_crc.c | 186 ++ tests/kms_fbc_crc.c | 25 tests/kms_fence_pin_leak.c | 13 tests/kms_flip.c | 297 +++- tests/kms_flip_event_leak.c | 30 tests/kms_flip_tiling.c | 40 tests/kms_force_connector.c | 162 +- tests/kms_mmio_vs_cs_flip.c | 99 - tests/kms_pipe_crc_basic.c | 9 tests/kms_plane.c | 45 tests/kms_psr_sink_crc.c | 628 ++++----- tests/kms_pwrite_crc.c | 212 +++ tests/kms_render.c | 25 tests/kms_rotation_crc.c | 96 - tests/kms_setmode.c | 10 tests/kms_sink_crc_basic.c | 183 +- tests/kms_universal_plane.c | 265 ++-- tests/pm_lpsp.c | 8 tests/pm_psr.c | 86 - tests/pm_rc6_residency.c | 101 - tests/pm_rpm.c | 223 ++- tests/pm_rps.c | 112 + tests/prime_nv_api.c | 8 tests/prime_nv_pcopy.c | 8 tests/prime_nv_test.c | 2 tests/prime_self_import.c | 36 tests/sysfs_l3_parity | 6 tests/testdisplay.c | 43 tools/.gitignore | 9 tools/Android.mk | 2 tools/Makefile.sources | 36 tools/ddi_compute_wrpll.c | 649 ++++++++++ tools/intel_audio_dump.c | 210 +++ tools/intel_display_poller.c | 4 tools/intel_dpio_read.c | 2 tools/intel_dpio_write.c | 2 tools/intel_dump_decode.c | 3 tools/intel_error_decode.c | 58 tools/intel_gpu_abrt | 2 tools/intel_gpu_frequency.c | 359 +++++ tools/intel_gtt.c | 81 - tools/intel_infoframes.c | 1 tools/intel_iosf_sb_read.c | 26 tools/intel_iosf_sb_write.c | 28 tools/intel_l3_udev_listener.c | 23 tools/intel_nc_read.c | 71 - tools/intel_nc_write.c | 76 - tools/intel_punit_read.c | 71 - tools/intel_punit_write.c | 76 - tools/intel_reg_dumper.c | 2 tools/null_state_gen/Makefile.am | 15 tools/null_state_gen/intel_batchbuffer.c | 15 tools/null_state_gen/intel_batchbuffer.h | 11 tools/null_state_gen/intel_null_state_gen.c | 71 - tools/null_state_gen/intel_renderstate_gen6.c | 26 tools/null_state_gen/intel_renderstate_gen7.c | 9 tools/null_state_gen/intel_renderstate_gen8.c | 876 ++++--------- tools/null_state_gen/intel_renderstate_gen9.c | 477 +++++++ tools/quick_dump/Makefile.am | 28 tools/quick_dump/base_display.txt | 197 --- tools/quick_dump/broadwell | 1 tools/quick_dump/chipset.i | 2 tools/quick_dump/chipset_macro_wrap.c | 40 tools/quick_dump/common_display.txt | 197 +++ tools/quick_dump/haswell | 1 tools/quick_dump/ivybridge | 1 tools/quick_dump/quick_dump.py | 2 tools/quick_dump/sandybridge | 1 tools/quick_dump/skl_display.txt | 285 ++++ tools/quick_dump/skylake | 3 tools/skl_ddb_allocation.c | 447 ++++++ 285 files changed, 15601 insertions(+), 5491 deletions(-)
New commits: commit e3e659163f0dcb4bc5de852190a0478092784234 Author: Thomas Wood <thomas.w...@intel.com> Date: Thu Mar 12 17:06:54 2015 +0000 Update version to 1.10 and add the release date Signed-off-by: Thomas Wood <thomas.w...@intel.com> diff --git a/NEWS b/NEWS index 21af20e..a1aa526 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -Release 1.10 (XXXX-XX-XX) +Release 1.10 (2015-03-12) ------------------------- - New frequency manipulation tool (intel_gpu_frequency) diff --git a/configure.ac b/configure.ac index 16d6a2e..9b646dd 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ AC_PREREQ([2.60]) AC_INIT([intel-gpu-tools], - [1.9], + [1.10], [https://bugs.freedesktop.org/enter_bug.cgi?product=DRI&component=DRM/Intel], [intel-gpu-tools]) commit 3b8e121552b2bd0c9023fbec0b88da36a27ce42c Author: Thomas Wood <thomas.w...@intel.com> Date: Thu Mar 12 17:01:57 2015 +0000 lib: small documentation fixes Signed-off-by: Thomas Wood <thomas.w...@intel.com> diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c index bd0bcbc..666c323 100644 --- a/lib/intel_batchbuffer.c +++ b/lib/intel_batchbuffer.c @@ -661,7 +661,6 @@ void igt_blitter_fast_copy__raw(int fd, /** * igt_blitter_fast_copy: * @batch: batchbuffer object - * @context: libdrm hardware context to use * @src: source i-g-t buffer object * @src_x: source pixel x-coordination * @src_y: source pixel y-coordination diff --git a/lib/intel_batchbuffer.h b/lib/intel_batchbuffer.h index c90b5e7..fa8875b 100644 --- a/lib/intel_batchbuffer.h +++ b/lib/intel_batchbuffer.h @@ -187,7 +187,7 @@ void intel_copy_bo(struct intel_batchbuffer *batch, drm_intel_bo *dst_bo, drm_intel_bo *src_bo, long int size); -/** +/* * Yf/Ys tiling * * Tiling mode in the I915_TILING_... namespace for new tiling modes which are diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c index baebf5c..ff78ef1 100644 --- a/lib/ioctl_wrappers.c +++ b/lib/ioctl_wrappers.c @@ -699,6 +699,7 @@ void gem_context_set_param(int fd, struct local_i915_gem_context_param *p) /** * gem_context_require_param: * @fd: open i915 drm file descriptor + * @param: i915 hw context parameter * * Feature test macro to query whether hw context parameter support for @param * is available. Automatically skips through igt_require() if not. commit 595575b9cbdc705edc6f1ac6a3fbf2ceb45bf5ba Author: Thomas Wood <thomas.w...@intel.com> Date: Thu Mar 12 16:32:17 2015 +0000 Remove old entries from .gitignore files Signed-off-by: Thomas Wood <thomas.w...@intel.com> diff --git a/tests/.gitignore b/tests/.gitignore index 7b4dd94..426cc67 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -140,7 +140,6 @@ kms_sink_crc_basic kms_universal_plane multi-tests.txt pm_lpsp -pm_psr pm_rc6_residency pm_rpm pm_rps diff --git a/tools/.gitignore b/tools/.gitignore index fa3c7a1..ba7464c 100644 --- a/tools/.gitignore +++ b/tools/.gitignore @@ -1,6 +1,5 @@ # Please keep sorted alphabetically ddi_compute_wrpll -forcewaked intel_audio_dump intel_backlight intel_bios_dumper @@ -12,7 +11,6 @@ intel_dump_decode intel_error_decode intel_forcewaked intel_framebuffer_dump -intel_gpu_dump intel_gpu_frequency intel_gpu_time intel_gpu_top @@ -22,13 +20,9 @@ intel_iosf_sb_read intel_iosf_sb_write intel_l3_parity intel_lid -intel_nc_read -intel_nc_write intel_opregion_decode intel_panel_fitter intel_perf_counters -intel_punit_read -intel_punit_write intel_reg_checker intel_reg_dumper intel_reg_read commit a6c40c7665287305fe838b6871a26bcfecad9c0a Author: Thomas Wood <thomas.w...@intel.com> Date: Thu Mar 12 14:59:20 2015 +0000 lib: move igt_interactive_debug into igt_core.c igt_interactive_debug should be defined in igt_core.c, rather than the header, to avoid it being defined more than once. Reported-by: Damien Lespiau <damien.lesp...@intel.com> Signed-off-by: Thomas Wood <thomas.w...@intel.com> diff --git a/lib/igt_core.c b/lib/igt_core.c index c217a01..4ae3524 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -209,6 +209,7 @@ */ static unsigned int exit_handler_count; +const char *igt_interactive_debug; /* subtests helpers */ static bool list_subtests = false; diff --git a/lib/igt_core.h b/lib/igt_core.h index c2c820d..0716000 100644 --- a/lib/igt_core.h +++ b/lib/igt_core.h @@ -557,7 +557,7 @@ bool igt_run_in_simulation(void); void igt_skip_on_simulation(void); -const char *igt_interactive_debug; +extern const char *igt_interactive_debug; /* structured logging */ enum igt_log_level { commit dde047fe2c84e2519a8ed24db4ac9c794285bbd1 Author: Damien Lespiau <damien.lesp...@intel.com> Date: Thu Mar 12 14:31:15 2015 +0000 lib/fb: Use PRIx64 for uint64_t in format string Fix the following warning: igt_fb.c: In function 'igt_create_fb_with_bo_size': igt_fb.c:414:2: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 9 has type 'uint64_t' [-Wformat=] igt_debug("%s(width=%d, height=%d, format=0x%x [bpp=%d], tiling=%llx, size=%d\n", introduced by commit: commit e36091d1c7010e825897dc4487f9985ab353973b Author: Tvrtko Ursulin <tvrtko.ursu...@intel.com> Date: Tue Mar 3 14:11:01 2015 +0000 tiling: Convert framebuffer helpers to use fb modifiers Cc: Tvrtko Ursulin <tvrtko.ursu...@intel.com> Signed-off-by: Damien Lespiau <damien.lesp...@intel.com> diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 5c92fac..ce5a102 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -411,7 +411,7 @@ igt_create_fb_with_bo_size(int fd, int width, int height, bpp = igt_drm_format_to_bpp(format); - igt_debug("%s(width=%d, height=%d, format=0x%x [bpp=%d], tiling=%llx, size=%d\n", + igt_debug("%s(width=%d, height=%d, format=0x%x [bpp=%d], tiling=0x%"PRIx64", size=%d\n", __func__, width, height, format, bpp, tiling, bo_size); do_or_die(create_bo_for_fb(fd, width, height, bpp, tiling, bo_size, &fb->gem_handle, &fb->size, &fb->stride)); commit b1177831abedbf7dac323c6e67c2ec7c56c88009 Author: Tvrtko Ursulin <tvrtko.ursu...@intel.com> Date: Tue Mar 3 14:11:06 2015 +0000 tests/kms_flip_tiling: Exercise Y tiling modes on Gen9+ Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com> diff --git a/tests/kms_flip_tiling.c b/tests/kms_flip_tiling.c index 7d6998b..3181260 100644 --- a/tests/kms_flip_tiling.c +++ b/tests/kms_flip_tiling.c @@ -33,6 +33,7 @@ #include "igt_debugfs.h" #include "igt_kms.h" #include "ioctl_wrappers.h" +#include "intel_chipset.h" IGT_TEST_DESCRIPTION("Test that a page flip from a tiled buffer to a linear" " one works correctly."); @@ -40,6 +41,7 @@ IGT_TEST_DESCRIPTION("Test that a page flip from a tiled buffer to a linear" typedef struct { int drm_fd; igt_display_t display; + int gen; } data_t; /* @@ -61,7 +63,7 @@ fill_linear_fb(struct igt_fb *fb, data_t *data, drmModeModeInfo *mode) } static void -test_flip_changes_tiling(data_t *data, igt_output_t *output) +test_flip_changes_tiling(data_t *data, igt_output_t *output, uint64_t tiling) { struct igt_fb linear, tiled; drmModeModeInfo *mode; @@ -97,7 +99,7 @@ test_flip_changes_tiling(data_t *data, igt_output_t *output) /* allocate a tiled buffer and set the crtc with it */ igt_create_color_fb(data->drm_fd, width, mode->vdisplay, - DRM_FORMAT_XRGB8888, LOCAL_I915_FORMAT_MOD_X_TILED, + DRM_FORMAT_XRGB8888, tiling, 0.0, 0.0, 0.0, &tiled); igt_plane_set_fb(primary, &tiled); igt_display_commit(&data->display); @@ -132,6 +134,7 @@ igt_main igt_fixture { data.drm_fd = drm_open_any_master(); + data.gen = intel_gen(intel_get_drm_devid(data.drm_fd)); kmstest_set_vt_graphics_mode(); @@ -141,7 +144,26 @@ igt_main igt_subtest_f("flip-changes-tiling") { for_each_connected_output(&data.display, output) - test_flip_changes_tiling(&data, output); + test_flip_changes_tiling(&data, output, + LOCAL_I915_FORMAT_MOD_X_TILED); + } + + igt_subtest_f("flip-changes-tiling-Y") { + igt_require_fb_modifiers(data.drm_fd); + igt_require(data.gen >= 9); + + for_each_connected_output(&data.display, output) + test_flip_changes_tiling(&data, output, + LOCAL_I915_FORMAT_MOD_Y_TILED); + } + + igt_subtest_f("flip-changes-tiling-Yf") { + igt_require_fb_modifiers(data.drm_fd); + igt_require(data.gen >= 9); + + for_each_connected_output(&data.display, output) + test_flip_changes_tiling(&data, output, + LOCAL_I915_FORMAT_MOD_Yf_TILED); } igt_fixture { commit 7b8ba120b956e706f2cdea831233973f0ee079fa Author: Damien Lespiau <damien.lesp...@intel.com> Date: Tue Mar 3 14:11:05 2015 +0000 testdisplay/skl: Add command line options for Yb/Yf tiled fbs Signed-off-by: Damien Lespiau <damien.lesp...@intel.com> diff --git a/tests/testdisplay.c b/tests/testdisplay.c index 6b1f265..f864940 100644 --- a/tests/testdisplay.c +++ b/tests/testdisplay.c @@ -51,6 +51,7 @@ #include <cairo.h> #include <errno.h> +#include <getopt.h> #include <math.h> #include <stdint.h> #include <stdbool.h> @@ -71,8 +72,10 @@ #include <stdlib.h> #include <signal.h> -#define SUBTEST_OPTS 1 +#define SUBTEST_OPTS 1 #define HELP_DESCRIPTION 2 +#define Yb_OPT 3 +#define Yf_OPT 4 static int tio_fd; struct termios saved_tio; @@ -544,7 +547,7 @@ int update_display(void) return 1; } -static char optstr[] = "3hiaf:s:d:p:mrto:j:"; +static char optstr[] = "3hiaf:s:d:p:mrto:j:y"; static void __attribute__((noreturn)) usage(char *name, char opt) { @@ -645,6 +648,8 @@ int main(int argc, char **argv) {"run-subtest", 1, 0, SUBTEST_OPTS}, {"help-description", 0, 0, HELP_DESCRIPTION}, {"help", 0, 0, 'h'}, + {"yb", 0, 0, Yb_OPT}, + {"yf", 0, 0, Yf_OPT}, { 0, 0, 0, 0 } }; @@ -697,6 +702,13 @@ int main(int argc, char **argv) case 't': tiling = LOCAL_I915_FORMAT_MOD_X_TILED; break; + case 'y': + case Yb_OPT: + tiling = LOCAL_I915_FORMAT_MOD_Y_TILED; + break; + case Yf_OPT: + tiling = LOCAL_I915_FORMAT_MOD_Yf_TILED; + break; case 'r': qr_code = 1; break; commit ff451a6d439f76ddc51cc0a374f086ace4dab680 Author: Damien Lespiau <damien.lesp...@intel.com> Date: Tue Mar 3 14:11:04 2015 +0000 lib: Allow the creation of Ys/Yf tiled FBs There's no fencing for those tiling layouts, so we create a linear bo for cairo to play with, and when cairo is finished with it, we do a fast copy blit to the fb BO with its final tiling. v2: Move to correct domain after CPU is done with the object (-EINVAL). (Tvrtko Ursulin) Correct arguments passed in to framebuffer creation (segfault). (Tvrtko Ursulin) Pass zero stride to kernel as it expects for Yf&Ys. (Tvrtko Ursulin) v3: Rebase for gem_mmap__cpu changes. (Tvrtko Ursulin) v4: Rebase for addfb2.5. (Tvrtko Ursulin) Signed-off-by: Damien Lespiau <damien.lesp...@intel.com> Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com> diff --git a/lib/igt_fb.c b/lib/igt_fb.c index c54907e..5c92fac 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -112,7 +112,7 @@ static int create_bo_for_fb(int fd, int width, int height, int bpp, bo_size = size; gem_handle = gem_create(fd, bo_size); - if (tiling != LOCAL_DRM_FORMAT_MOD_NONE) + if (tiling == LOCAL_I915_FORMAT_MOD_X_TILED) ret = __gem_set_tiling(fd, gem_handle, I915_TILING_X, stride); *stride_ret = stride; @@ -629,6 +629,104 @@ static cairo_format_t drm_format_to_cairo(uint32_t drm_format) drm_format, igt_format_str(drm_format)); } +struct fb_blit_upload { + int fd; + struct igt_fb *fb; + struct { + uint32_t handle; + unsigned size, stride; + uint8_t *map; + } linear; +}; + +static void destroy_cairo_surface__blit(void *arg) +{ + struct fb_blit_upload *blit = arg; + struct igt_fb *fb = blit->fb; + unsigned int obj_tiling = I915_TILING_NONE; + + munmap(blit->linear.map, blit->linear.size); + fb->cairo_surface = NULL; + + gem_set_domain(blit->fd, blit->linear.handle, + I915_GEM_DOMAIN_GTT, 0); + + switch (fb->tiling) { + case LOCAL_I915_FORMAT_MOD_X_TILED: + obj_tiling = I915_TILING_X; + break; + case LOCAL_I915_FORMAT_MOD_Y_TILED: + obj_tiling = I915_TILING_Y; + break; + case LOCAL_I915_FORMAT_MOD_Yf_TILED: + obj_tiling = I915_TILING_Yf; + break; + } + + igt_blitter_fast_copy__raw(blit->fd, + blit->linear.handle, + blit->linear.stride, + I915_TILING_NONE, + 0, 0, /* src_x, src_y */ + fb->width, fb->height, + fb->gem_handle, + fb->stride, + obj_tiling, + 0, 0 /* dst_x, dst_y */); + + gem_sync(blit->fd, blit->linear.handle); + gem_close(blit->fd, blit->linear.handle); + + free(blit); +} + +static void create_cairo_surface__blit(int fd, struct igt_fb *fb) +{ + struct fb_blit_upload *blit; + cairo_format_t cairo_format; + int bpp, ret; + + blit = malloc(sizeof(*blit)); + igt_assert(blit); + + /* + * We create a linear BO that we'll map for the CPU to write to (using + * cairo). This linear bo will be then blitted to its final + * destination, tiling it at the same time. + */ + bpp = igt_drm_format_to_bpp(fb->drm_format); + ret = create_bo_for_fb(fd, fb->width, fb->height, bpp, + LOCAL_DRM_FORMAT_MOD_NONE, 0, + &blit->linear.handle, + &blit->linear.size, + &blit->linear.stride); + + igt_assert(ret == 0); + + blit->fd = fd; + blit->fb = fb; + blit->linear.map = gem_mmap__cpu(fd, + blit->linear.handle, + 0, + blit->linear.size, + PROT_READ | PROT_WRITE); + igt_assert(blit->linear.map); + + gem_set_domain(fd, blit->linear.handle, + I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU); + + cairo_format = drm_format_to_cairo(fb->drm_format); + fb->cairo_surface = + cairo_image_surface_create_for_data(blit->linear.map, + cairo_format, + fb->width, fb->height, + blit->linear.stride); + + cairo_surface_set_user_data(fb->cairo_surface, + (cairo_user_data_key_t *)create_cairo_surface__blit, + blit, destroy_cairo_surface__blit); +} + static void destroy_cairo_surface__gtt(void *arg) { struct igt_fb *fb = arg; @@ -651,8 +749,13 @@ static void create_cairo_surface__gtt(int fd, struct igt_fb *fb) static cairo_surface_t *get_cairo_surface(int fd, struct igt_fb *fb) { - if (fb->cairo_surface == NULL) - create_cairo_surface__gtt(fd, fb); + if (fb->cairo_surface == NULL) { + if (fb->tiling == LOCAL_I915_FORMAT_MOD_Y_TILED || + fb->tiling == LOCAL_I915_FORMAT_MOD_Yf_TILED) + create_cairo_surface__blit(fd, fb); + else + create_cairo_surface__gtt(fd, fb); + } gem_set_domain(fd, fb->gem_handle, I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU); commit eb93c1b33ef6eebe53646003e951e54a3e68bc5e Author: Tvrtko Ursulin <tvrtko.ursu...@intel.com> Date: Tue Mar 3 14:11:03 2015 +0000 lib/igt_fb: Use new ADDFB2 extension for new tiling modes Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com> diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 853b2f9..c54907e 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -404,16 +404,10 @@ igt_create_fb_with_bo_size(int fd, int width, int height, uint32_t format, uint64_t tiling, struct igt_fb *fb, unsigned bo_size) { - uint32_t handles[4]; - uint32_t pitches[4]; - uint32_t offsets[4]; uint32_t fb_id; int bpp; memset(fb, 0, sizeof(*fb)); - memset(handles, 0, sizeof(handles)); - memset(pitches, 0, sizeof(pitches)); - memset(offsets, 0, sizeof(offsets)); bpp = igt_drm_format_to_bpp(format); @@ -422,14 +416,30 @@ igt_create_fb_with_bo_size(int fd, int width, int height, do_or_die(create_bo_for_fb(fd, width, height, bpp, tiling, bo_size, &fb->gem_handle, &fb->size, &fb->stride)); - handles[0] = fb->gem_handle; - pitches[0] = fb->stride; - igt_debug("%s(handle=%d, pitch=%d)\n", - __func__, handles[0], pitches[0]); - do_or_die(drmModeAddFB2(fd, width, height, format, - handles, pitches, offsets, - &fb_id, 0)); + __func__, fb->gem_handle, fb->stride); + + if (tiling != LOCAL_DRM_FORMAT_MOD_NONE && + tiling != LOCAL_I915_FORMAT_MOD_X_TILED) { + do_or_die(__kms_addfb(fd, fb->gem_handle, width, height, + fb->stride, format, tiling, + LOCAL_DRM_MODE_FB_MODIFIERS, &fb_id)); + } else { + uint32_t handles[4]; + uint32_t pitches[4]; + uint32_t offsets[4]; + + memset(handles, 0, sizeof(handles)); + memset(pitches, 0, sizeof(pitches)); + memset(offsets, 0, sizeof(offsets)); + + handles[0] = fb->gem_handle; + pitches[0] = fb->stride; + + do_or_die(drmModeAddFB2(fd, width, height, format, + handles, pitches, offsets, + &fb_id, 0)); + } fb->width = width; fb->height = height; commit c7bac3c62ab27045ceec898787435bbb5678b015 Author: Tvrtko Ursulin <tvrtko.ursu...@intel.com> Date: Tue Mar 3 14:11:02 2015 +0000 lib: Add support for new extension to the ADDFB2 ioctl. New functionality accessesed via the __kms_addfb wrapper. Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com> diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c index 5cbb873..baebf5c 100644 --- a/lib/ioctl_wrappers.c +++ b/lib/ioctl_wrappers.c @@ -1165,3 +1165,29 @@ void igt_require_fb_modifiers(int fd) igt_require(has_modifiers); } + +int __kms_addfb(int fd, uint32_t handle, uint32_t width, uint32_t height, + uint32_t stride, uint32_t pixel_format, uint64_t modifier, + uint32_t flags, uint32_t *buf_id) +{ + struct local_drm_mode_fb_cmd2 f; + int ret; + + igt_require_fb_modifiers(fd); + + memset(&f, 0, sizeof(f)); + + f.width = width; + f.height = height; + f.pixel_format = pixel_format; + f.flags = flags; + f.handles[0] = handle; + f.pitches[0] = stride; + f.modifier[0] = modifier; + + ret = drmIoctl(fd, LOCAL_DRM_IOCTL_MODE_ADDFB2, &f); + + *buf_id = f.fb_id; + + return ret < 0 ? -errno : ret; +} diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h index 99fc7fd..ced7ef3 100644 --- a/lib/ioctl_wrappers.h +++ b/lib/ioctl_wrappers.h @@ -167,4 +167,13 @@ struct local_drm_mode_fb_cmd2 { void igt_require_fb_modifiers(int fd); +/** + * __kms_addfb: + * + * Creates a framebuffer object. + */ +int __kms_addfb(int fd, uint32_t handle, uint32_t width, uint32_t height, + uint32_t stride, uint32_t pixel_format, uint64_t modifier, + uint32_t flags, uint32_t *buf_id); + #endif /* IOCTL_WRAPPERS_H */ commit e36091d1c7010e825897dc4487f9985ab353973b Author: Tvrtko Ursulin <tvrtko.ursu...@intel.com> Date: Tue Mar 3 14:11:01 2015 +0000 tiling: Convert framebuffer helpers to use fb modifiers This converts the IGT API only, underneath legacy set_tiling is still used. v2: One got away in kms_flip. Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com> Signed-off-by: Damien Lespiau <damien.lesp...@intel.com> diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 9b41301..853b2f9 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -75,7 +75,7 @@ static struct format_desc_struct { /* helpers to create nice-looking framebuffers */ static int create_bo_for_fb(int fd, int width, int height, int bpp, - unsigned int tiling, unsigned bo_size, + uint64_t tiling, unsigned bo_size, uint32_t *gem_handle_ret, unsigned *size_ret, unsigned *stride_ret) @@ -84,7 +84,7 @@ static int create_bo_for_fb(int fd, int width, int height, int bpp, int size, ret = 0; unsigned stride; - if (tiling) { + if (tiling != LOCAL_DRM_FORMAT_MOD_NONE) { int v; /* Round the tiling up to the next power-of-two and the @@ -112,8 +112,8 @@ static int create_bo_for_fb(int fd, int width, int height, int bpp, bo_size = size; gem_handle = gem_create(fd, bo_size); - if (tiling) - ret = __gem_set_tiling(fd, gem_handle, tiling, stride); + if (tiling != LOCAL_DRM_FORMAT_MOD_NONE) + ret = __gem_set_tiling(fd, gem_handle, I915_TILING_X, stride); *stride_ret = stride; *size_ret = size; @@ -385,7 +385,7 @@ void igt_paint_image(cairo_t *cr, const char *filename, * @width: width of the framebuffer in pixel * @height: height of the framebuffer in pixel * @format: drm fourcc pixel format code - * @tiling: tiling layout of the framebuffer + * @tiling: tiling layout of the framebuffer (as framebuffer modifier) * @fb: pointer to an #igt_fb structure * @bo_size: size of the backing bo (0 for minimum needed size) * @@ -401,7 +401,7 @@ void igt_paint_image(cairo_t *cr, const char *filename, */ unsigned int igt_create_fb_with_bo_size(int fd, int width, int height, - uint32_t format, unsigned int tiling, + uint32_t format, uint64_t tiling, struct igt_fb *fb, unsigned bo_size) { uint32_t handles[4]; @@ -417,7 +417,7 @@ igt_create_fb_with_bo_size(int fd, int width, int height, bpp = igt_drm_format_to_bpp(format); -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/e1ynble-0002pb...@moszumanska.debian.org